銀の弾丸

プログラミングに関して、いろいろ書き残していければと思っております。

なるべく一定周期で実行するスレッドクラス

Windowsで、なるべく正確に一定周期で処理を実行するタイマーの基本クラスです。

派生クラスで run() メソッドを実装し、start()メソッドを呼べば、setInterval()で指定した周期で、処理が呼び出されます。(⇒TimerThreadSample.cpp)

リアルタイムOSではないので、いろんな要因で処理時間に揺れが生じますが、処理が遅れた場合は、その後のSleep時間を調整してリカバリーするようになっています。

Windows単体でのデスクトップアプリでは、あまりこういうスレッドを使う用途はないように思いますが、外部機器の状態をポーリングするときなどには有用かと。あとカメラのキャプチャとかも。マルチコアのPCなら、結構アドバンテージが出ます。

処理時間の安定度は、処理内容とマシンスペックに依存します。手元の貧弱なPC(Windows7)では、30ms程度の定期実行は、それなりに安定していましたが、10msでは極端に遅れるケースがありました。音楽の再生など、シビアな用途には向きません。

デバッグ版では、処理実行時のクロックをログってデストラクタでレポートするようにしています。