元の問題はここで説明されています。提供されたソリューションを理解し、うまくいくと思います。しかし、すべてがうまくいったわけではありません。何らかの理由で、常に発行されるとは限らないQThread::finished
、または常に呼び出されるとは限らない問題があります。QWidget::close()
つまり、閉じるボタンを 2 回押す必要がある場合があります。ワーカースレッドは最初のスレッドで終了しcloseEvent
、イベントではもう無視されないため、2 回目のプレスで機能します。
この問題は、メイン ウィンドウが表示された直後にアプリケーションを閉じようとした場合にのみ発生します。数秒待つと、最初のクリックでアプリケーションが閉じます。
PSワーカースレッドは無限です。
アップデート
ワーカーの Run メソッド
virtual void
run() {
PRINT("Simulation Started at Thread %d", QThread::currentThread());
_isFinished = false;
double position = 0.0;
// Some calculations
emit updated();
while (!_isFinished) {
_mutex.lock();
if (_isPaused)
_waitCondition.wait(&_mutex);
_mutex.unlock();
if (_isFinished)
break;
QThread::msleep(_delay);
// some calculations;
emit updated();
}
PRINT("Simulation Finished");
}