【发布时间】:2013-03-07 10:43:56
【问题描述】:
我正在阅读我应该使用 worker 对象并通过 moveToThread 将其移动到线程,而不是直接从 QThread 继承。但是我找不到如何在我的对象工作者中停止循环的解决方案。例如我有测试循环:
void CollectionWorker::doWork()
{
for (int i = 0; i < 10; ++i) {
sleep(1);
emit ping(i);
}
}
现在我将这个对象移动到线程:
worker->moveToThread(mTh);
这工作正常。但是当我调用 mTh.quit() 时,线程正在等待,直到 doWork 中的循环结束。当我直接从 QThread 继承时,我可以在每个循环上检查线程状态并在 thred 完成时中断循环,但不知道如何在工作对象中执行此操作。我可以在工作对象中创建一些标志并从主线程切换它吗?或者也许我可以找到线程所有者并检查它的状态?或者在启动线程之前更好,在工作对象中设置线程指针然后检查状态?什么是最好的线程安全解决方案?
问候
【问题讨论】: