Quantcast
Channel: イグトランスの頭の中
Viewing all articles
Browse latest Browse all 123

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

$
0
0

要約すると「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に置き換えるべきかと思った話 is a post from: イグトランスの頭の中(のかけら)


Viewing all articles
Browse latest Browse all 123

Trending Articles