メインスレッドがGUIスレッドであり、セカンダリスレッドがネストされたforループ内で主要な計算を行うスレッドアプリケーションがあります。今問題は、セカンダリスレッドを終了する方法です。私がGUIスレッド上の停止ボタンを押すと、それは二次スレッド内のスロットを呼び出して、停止変数を真に設定します。この手法の問題点は、forループの停止変数をテストすることです(下図参照)。スレッドが3番目のforループに入った直後に停止ボタンを押すと、停止フラグをチェックする前にすべての長い関数が実行されるためです。なぜ私たちは内容を実行する前に各機能でそれをテストする必要があるのですか?それは非常に洗練された解決策ではありません。 このスレッドでは、メモリのメモリ量をいくらか確保し、terminateを呼び出すとそのメモリがリークするため、このスレッドでterminateを呼び出すことはできません。長時間実行するQtスレッドを終了するには
このようなシナリオでは、スレッドと任意のポイントを終了する最も良い方法は何でしょうか?コードスケルトン後
はちょうどあなたと私/ 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(); }