PulseEvent

現在のプロジェクトでスケジューラのような部分を担当していて、複数のスレッドを同時に定期的に実行している部分がある。どうも一部のスレッドが実行されていないように見える。この部分では手動リセットのイベントを用意しておいて、PulseEventを使って*1スレッドを一斉に開始するようにしてある。
どーもPulseEventが怪しさ満点なのでちょいと調査したところ、USのMSDNのPulseEventの説明の中に、

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

なんて思いっきり書いてある。正確にはWindows APIのPulseEventは使っていないのだけれど、まあ同じようなものだろうということで、PulseEventは使わないように修正。ちょっと見では安定して動いているような雰囲気。
確かにMSDN日本語版には誤訳が多いけれど、こんな重要な注意書きを丸々削るのは止めてくれぃ。

*1:実際にはリアルタイムOSなのでWindows APIのPulseEventではないのだけれど。