桜、抹茶、白、日記

名古屋市在住のC++使いのcoderの日記だったもの。

PulseEvent

Win32APIのPulseEventについて。MSエバンジェリストの岩田さんのつぶやきで、

iwata_mp.148 で PulseEvent() が取り上げられているんだけど、意図した動作をしないため使ってはいけない関数。Monitor.PulseAll() は問題ないんだけど。blog で取り上げようかしら… NT Kernel が過去に犯した2つの欠陥の1つ ( 2009-10-30 14:53:06 )
iwata_men-us のほうにはしっかり「This function is unreliable and should not be used. It exists mainly for backward compatibility.」 と書いてある http://j.mp/1j0Qz ( 2009-10-30 14:58:44 )

Note This function is unreliable and should not be used. It exists mainly for backward compatibility. For more information, see Remarks.

PulseEventは意図した動作をしないので使ってはいけないと言っていて、自分も今までのプロジェクトでもSetEventばかりであまり使っていないAPIだし、使おうとしてうまく使いこなせなかった記憶があります。
日本語のPulseEventの方を見てみてちょっと気になったのが、

http://msdn.microsoft.com/ja-jp/library/cc429290.aspx

PulseEventなんて昔からあるAPI(Windows 95以降/Windows NT 3.1以降)だと思うんですが、最初の英語のPulseEventの説明では、Windows 2000以降と表記されているんですよね。

第3回 マルチタスクに不可欠な同期の仕組みを学ぶ > 任意のイベントの発生を別スレッドに知らせる
http://itpro.nikkeibp.co.jp/article/COLUMN/20070603/273403/
http://itpro.nikkeibp.co.jp/article/COLUMN/20070603/273403/?ST=develop&P=6

このサンプルプログラムブクマしただけで試していなかったけど、ちょっと見てみるかな。