【发布时间】:2011-02-06 17:10:20
【问题描述】:
我正在尝试编写一个库来将所有磁盘活动分离到它自己的线程中,但文档并不真正关心这些事情。
我想要完成的是,除了启动之外,所有磁盘活动都是异步的,为此,我需要包装每个访问磁盘的类。以下是我目前发现的:
QtCore:
QtGui:
我相信还有更多。
【问题讨论】:
标签: multithreading user-interface qt disk
我正在尝试编写一个库来将所有磁盘活动分离到它自己的线程中,但文档并不真正关心这些事情。
我想要完成的是,除了启动之外,所有磁盘活动都是异步的,为此,我需要包装每个访问磁盘的类。以下是我目前发现的:
QtCore:
QtGui:
我相信还有更多。
【问题讨论】:
标签: multithreading user-interface qt disk
我有几点-
首先,当你这样做时,记住所有的GUI对象都是基于QWidget的,都在启动线程中运行。请参阅http://doc.trolltech.com/4.6/threads-qobject.html 讨论线程。引用是“虽然 QObject 是可重入的,但 GUI 类,尤其是 QWidget 及其所有子类,是不可重入的。它们只能从主线程中使用。如前所述,QCoreApplication::exec() 也必须从中调用线程”。
这也意味着,如果您需要在屏幕上显示来自这些包装类之一的信息,则在将信息传递回 GUI 线程时需要注意对象的所有权。特别是任何基于 QObject 的东西。
其次,启动线程会带来运行时成本。因此,我建议您构建您的设计,以尽量减少创建和销毁此包装线程类的次数。
总体而言是一种有趣的文件处理方法。这是我将为我当前的应用程序考虑的一个。它可能会解决我遇到的一些问题。
【讨论】: