我在讀我應該使用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