0

で新しいスレッドを作成しAfxBeginThreadます。AfxExitThreadを使用してスレッドを終了し、値を返すことを試みました。これらは両方とも、スレッドを終了する有効な方法であると想定されています。

しかし、電話をかけるとGetExitCodeThreadSTILL_ACTIVE数時間経っても電話がかかってきます。また、を使用(WaitForSingleObject(ahtRespondThreads[i], 0) == WAIT_OBJECT_0)すると、スレッドオブジェクトがまだ有効であることを示します。

スレッドが本当に終了したかどうかをどのように判断する必要がありますか?はい、関数が終了する前にいくつかの変数を設定できることは知っていますが、スレッドハンドルを照会して、関数が終了したか、有効なスレッドではなくなったことを知ることができるはずです。

4

2 に答える 2

3

GetExitCodeThread()嘘をWaitForSingleObject()つかないので、両方がスレッドがまだアクティブであると言っている場合、スレッドは実際にはまだアクティブであり、制御機能からまだ終了していません。関数のバグをチェックして、予期したときに実際に終了していることを確認してください。

于 2012-09-19T22:24:08.050 に答える
0

これらの方法は両方とも機能するはずです。見落としている可能性のあるバグがないかコードを確認することをお勧めします。また、ここで別の記事に出くわしました。

注意点:

私が知っているスレッドを終了する最良の方法は、スレッドが無期限にスリープしないようにすることです。タスクが完了したら、変数をチェックします。これにより、終了する必要があるかどうかがわかります。

すなわち

  1. フラグを立てる
  2. 眠っている場合はスレッドを起こします
  3. 作業が完了したかどうかを確認する
  4. リソースをクリーンアップする
  5. 出口
于 2012-09-19T22:28:04.907 に答える