スレッド絡みの用語について質問させていただきます。
スレッドの終了を待つサンプルとして、
WaitForSingleObjectを使うものをよく見けますが、APIの解説を見ると、
「指定されたオブジェクトがシグナル状態になるのを待つ」と書かれています。
「スレッドがシグナル状態になる」とは、
終了したことを表すものなのでしょうか?
> 「スレッドがシグナル状態になる」とは、
> 終了したことを表すものなのでしょうか?
ちょっと言葉足らずな質問でしたので追記させていただきます。
WaitForSingleObjectで待機開始後にスレッドが終了したり、
あるいは待機開始前にすでにスレッドが終了していたりすると、
WaitForSingleObjectを抜けるのは体験的に理解していますが、
処理内容によっては終了していなくても「シグナル状態」になる、
ということは起こりえないものなのでしょうか?
http://msdn.microsoft.com/ja/library/ms686364(v=vs.85).aspx
より
Its state is set to nonsignaled while the thread is running,
and set to signaled when the thread terminates.
ちなみにですが、引き渡すハンドルが何を指しているかによって
意味合いが違ってきますから、スレッドのハンドルならこうなるとか
セマフォのハンドルならこうなるとか、そういう風に整理する必要が
あると思います。
日本語のMSDNに書かれていない場合でも原書(英語版)には書かれている
ケースは結構有るので日本語版で見つけられない時は原書を見た方が
良いと思います。日本語版の場合、機械翻訳が増えてきて和訳の内容が
怪しいケースも有るみたいですし。
MSDNの中身は一通り調べてみたつもりだったのですが、
チェックが足りなかったようです。
いつもGetExitCodeThreadを使ってSTILL_ACTIVEかどうかで
スレッドがまだ終了していないかどうかを判定していましたが、
if (WaitForSingleObject(m_pThread->m_hThread, 0) == WAIT_TIMEOUT)
のような記述でよかったのですね。
ありがとうございました。