0

Web からデータをQThreadフェッチする があります。ユーザーが何か他のことを要求する場合があり、データも変更をフェッチする必要があります。

現在の構成では、スレッドを呼び出しterminate()、入力データを変更しstart()て、スレッドを再度呼び出します。これで問題なく動作しますが、呼び出し時isRunning()またはisFinished()終了したスレッドでメインのイベントループが停止することがあります。永久に動かなくなり、プロセスを強制終了するまで回復しません。

  1. そもそもなぜぶら下がっisRunning()たりするのでしょうか?isFinished()彼らはブロックするつもりはありません。
  2. このワークフローは受け入れられますか? そうでない場合、スレッドのプロセスが不要になったときにスレッドのプロセスを停止するにはどうすればよいですか (または、どのように放棄できますか)?
4

2 に答える 2

1

を使用しないでください。ドキュメントterminate()の警告をお読みください。

を再起動することは可能ですがQThread、通常、スレッドを再起動することはお勧めできません。実行しようとしていることを実行するためのより良い解決策があるはずです。

于 2012-11-03T19:51:47.837 に答える
0

場合によっては、終了後にスレッドが使用できなくなり、シグナルの後でのみ呼び出されたとしても、呼び出し元のスレッドがハングする可能性がありますisRunning()isFinished()TERMINATED

私の回避策は、スレッドを終了し、それを忘れて、新しいスレッドを開始することでした。

于 2012-11-08T22:52:09.640 に答える