有没有办法检测QT QRunnable对象何时完成? (除了在run()方法结束时手动创建一些信令事件。)
答案 0 :(得分:5)
您可以简单地使用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。
请注意,使用此解决方案,您有责任在执行期间将实例保留在内存中。
答案 1 :(得分:4)
可能有,或者你可能需要稍高一点。 QFuture
和QFutureWatcher
类旨在与Qt的Concurrent framework和QFutureWatcher
类has a signal一起使用,当它正在观看的项目结束时。
答案 2 :(得分:4)
您可以添加自己的SIGNAL
作为run()
方法执行的最后一项操作。然后,只需在调用SLOT
connect(...);
即可