要約すると「SetTimerのすごい版、SetCoalescableTimerが出た。けど、わざわざSetTimerから移行する必要はないと分かった」というお話です。


Windows 8よりSetTimerの系統にSetCoalescableTimerが増えていることに気付きました。

Windows 7からのSetWaitableTimerExと同方向(精度と引き替えに省電力性が増すとされる)に強化されている関数のようです。ただし、SetWaitableTimerExと比べて便利になっている点があります。それは、タイマーのずれの許容範囲について、TIMERV_DEFAULT_COALESCINGを指定すればいい感じにやってくれる点です。SetWaitableTimerExではタイマー間隔に応じて手動で指定しなければなりませんでした。

「さて、SetTimer使っている箇所をSetCoalescableTimerに置き換える必要があるのかな」と思いました。しかし、よく見るとMSDNライブラリの当該関数のページのRemarksにこう書いてあります。

When uToleranceDelay is set to 0, the system default timer coalescing is used and SetCoalescableTimer behaves the same as SetTimer.

TIMERV_DEFAULT_COALESCINGの値は0です。つまり、これまでどおりSetTimerを使っているだけでTIMERV_DEFAULT_COALESCING相当の効果が得られるということですね。微調整を行いたい場合のみSetCoalescableTimerを使えば良いということでしょう。

そういえば、SetWaitableTimerExが出たとき「SetTimer使っているところ、勝手にいい感じにやってくれないかなあ。精度を重要視していないからSetTimer使っているわけで」と考えていたことを思い出しました。叶いました。

参照(SetWaitableTimerExの話はこちら):Designing Energy Efficient Applications (エネルギー効率の良いアプリケーションを設計する) – Microsoft


スポンサード リンク

この記事のカテゴリ

  • ⇒ SetCoalescableTimerに置き換えるべきかと思った話