我在读我应该使用worker对象,并通过moveToThread将其移动到线程,而不是直接从QThread继承。但我无法找到解决方案如何停止我的对象工人循环。例如,我有测试回路:QThread - 如何阻止工人?
void CollectionWorker::doWork()
{
for (int i = 0; i < 10; ++i) {
sleep(1);
emit ping(i);
}
}
现在我提出这个对象的线程:
worker->moveToThread(mTh);
这是工作的罚款。但是当我调用mTh.quit()时,线程正在等待,直到doWork中的循环结束。当我直接从QThread继承,然后在每个循环中,我可以检查线程状态并在完成完成时断开循环,但不知道如何在工作对象中执行此操作。我可以在工作对象中创建一些标志并将其从主线程中切换出来吗?或者,也许我可以找到线程所有者并检查它的状态?或者,也许在开始线程之前更好,在工作对象中设置线程指针,然后检查状态?什么是最好的线程安全解决方案?
Regards
是的我知道,但这不是问题。如果我的循环是“永远”的话会怎么样?我想用类似下面的方式来阻止它: for(int i = 0; i <10; ++ i)if() return; sleep(1); 发出ping(i); } –
Dibo
2013-03-07 11:14:29
该标志最有意义。'while(stillDoingWork && notStopped)' – Anthony 2013-03-07 11:57:05
是否在主线程(例如,来自按钮clik)的线程安全中设置工作者标志?只有主线程写入此标志,工作人员才会读取 – Dibo 2013-03-07 12:06:11