2010年1月18日月曜日

[WIN]定期的に起動するスレッド-CreateWaitableTimer()

マルチスレッドプログラミングで、定期的に何か処理をしたいというケースがあります。

他にすること無ければSleep()で寝ていればいいんですが、一定時間内に通信が無かったら何か処理をする(状態問い合わせ)といった処理を実装する場合、Sleep()では困ってしまいます。

こういった場合、CreateWaitableTimer()でタイマイベントを生成し、SetWaitableTimer()で時間設定をした上で、WaitForMultipleObjects()で他のイベントと待つことが出来ます。

※(2002.9.25追記)とはいっても、Windowsですから、正確にms単位の時間待ちは出来ないものと思ったほうが正解です。

マウスを動かしたり、ディスクアクセスが入るだけで、0.1sec単位で平気でずれます。

hTimerEventHandle = CreateWaitableTimer(NULL, FALSE, NULL);

LARGE_INTEGER largeTime;
largeTime.LowPart = 0;
largeTime.HighPart = 0;
SetWaitableTimer(hTimerEventHandle, &largeTime, nInterval, NULL, NULL, FALSE);



【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。