0

元の問題はここで説明されています。提供されたソリューションを理解し、うまくいくと思います。しかし、すべてがうまくいったわけではありません。何らかの理由で、常に発行されるとは限らない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");
}
4

1 に答える 1