【发布时间】:2010-10-14 07:26:08
【问题描述】:
有没有办法检测 QT QRunnable 对象何时完成? (除了在 run() 方法结束时手动创建一些信号事件。)
【问题讨论】:
标签: multithreading qt threadpool
有没有办法检测 QT QRunnable 对象何时完成? (除了在 run() 方法结束时手动创建一些信号事件。)
【问题讨论】:
标签: multithreading qt threadpool
您可以简单地使用 QtConcurrent 来运行 runnable 并使用 QFuture 等待完成。
#include <QtConcurrentRun>
class MyRunnable : public Runnable{
void run();
}
为了运行并等待它,您可以执行以下操作
//create a new MyRunnable to use
MyRunnable instance;
//run the instance asynchronously
QFuture<void> future = QtConcurrent::run(&instance, &MyRunnable::run);
//wait for the instance completion
future.waitForFinished();
Qtconcurrent::run 将启动一个新线程以在实例上执行方法 run() 并立即返回一个跟踪实例进度的 QFuture。
但请注意,使用此解决方案您有责任在执行期间将实例保存在内存中。
【讨论】:
可能有,或者你可能需要稍微更高一点。 QFuture 和 QFutureWatcher 类旨在与 Qt 的 Concurrent framework 和 QFutureWatcher 类 has a signal 一起工作,当它正在观看的项目完成时。
【讨论】:
您可以添加自己的 SIGNAL,它会作为您的 run() 方法所做的最后一件事发出。然后在调用connect(...);之前将其连接到对应的SLOT
【讨论】: