我有一個線程化的應用程序,其中主線程是gui線程,輔助線程是嵌套for循環內主要計算的線程。現在問題是如何終止輔助線程。當我按下GUI線程上的停止按鈕時,它在輔助線程中調用了一個插槽,該插槽將stop變量設置爲true。這種技術的問題是,在for循環中測試停止變量(如下所示)是不夠的。因爲如果在線程進入第三個for循環之後按下停止按鈕,它將在檢查停止標誌之前執行所有冗長的函數。這就是爲什麼我們需要在執行其內容之前在每個函數中測試它,我認爲這不是一個非常優雅的解決方案。 我不能在這個線程上調用終止,因爲這個線程分配了一定量的內存內存,調用terminate會導致內存泄漏。如何終止長時間運行的Qt線程
因此,對於這種情況,終止線程和任何點的最佳方法是什麼?
以下代碼框架是隻給你什麼I/M談論
void run() {
for(int i = 0; i < 4 && !stop; i++) {
for(int j = 0; j < 3 && !stop; j++) {
for(int k; k < 6 && !stop; k++) {
callA();
callB();
callC();
callD();
callE();
callF();
callF();
callG();
}
}
}
}
callA() { callL(); }
callB() { callM(); }
callC() { callN(); }
callD() { callO(); }
callE() { callP(); }
callF() { callQ(); }
callF() { callR(); }
callG() { callS(); }
callL() { sleep(20); }
callM() { sleep(60); }
callN() { QProcess(); }
callO() { sleep(30);}
callP() { QProcess(); }
callQ() { }
callR() { sleep(60); }
callS() { QProcess(); }