シグナル状態

[戻る]
いしだ 2011/01/28(金) 12:12:40
スレッド絡みの用語について質問させていただきます。

スレッドの終了を待つサンプルとして、
WaitForSingleObjectを使うものをよく見けますが、APIの解説を見ると、
「指定されたオブジェクトがシグナル状態になるのを待つ」と書かれています。

「スレッドがシグナル状態になる」とは、
終了したことを表すものなのでしょうか?

いしだ 2011/01/28(金) 12:35:01
> 「スレッドがシグナル状態になる」とは、
> 終了したことを表すものなのでしょうか?

ちょっと言葉足らずな質問でしたので追記させていただきます。

WaitForSingleObjectで待機開始後にスレッドが終了したり、
あるいは待機開始前にすでにスレッドが終了していたりすると、
WaitForSingleObjectを抜けるのは体験的に理解していますが、
処理内容によっては終了していなくても「シグナル状態」になる、
ということは起こりえないものなのでしょうか?

ryo 2011/01/28(金) 14:10:43
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.

PATIO 2011/01/28(金) 15:11:53
ちなみにですが、引き渡すハンドルが何を指しているかによって
意味合いが違ってきますから、スレッドのハンドルならこうなるとか
セマフォのハンドルならこうなるとか、そういう風に整理する必要が
あると思います。

日本語のMSDNに書かれていない場合でも原書(英語版)には書かれている
ケースは結構有るので日本語版で見つけられない時は原書を見た方が
良いと思います。日本語版の場合、機械翻訳が増えてきて和訳の内容が
怪しいケースも有るみたいですし。

いしだ 2011/01/31(月) 09:40:10
[[解決]]
MSDNの中身は一通り調べてみたつもりだったのですが、
チェックが足りなかったようです。

いつもGetExitCodeThreadを使ってSTILL_ACTIVEかどうかで
スレッドがまだ終了していないかどうかを判定していましたが、
if (WaitForSingleObject(m_pThread->m_hThread, 0) == WAIT_TIMEOUT)
のような記述でよかったのですね。

ありがとうございました。

古いスレッドには追加発言できません。