1. 精度不高
windows98大概是55ms,Windows NT大概是10ms。
2. WM_TIMER消息可能無法及時處理
WM_TIMER消息和其他消息一樣,存放在正常的消息隊列之中。如果程序處理其他消息,用了太長的時間,就耽誤了WM_TIMER消息的處理,從效果上看就相當於定時器來晚了。
3. WM_TIMER消息可能會有遺漏
這樣一來,如果一個windows程序在時間方面有苛刻的要求(例如,測試儀之類的軟件),怎麼辦呢。
“小兵以太網測試儀”采用的是如下的笨方法。
這種方法非常簡單,但也確實有效。下面是此方法的偽代碼。
interval=x; //所需的時間間隔
next_do_work_time=當前時間;
while (!need_stop)
{
do
{
cur_time=當前時間;
} while (!need_stop && cur_time
if (need_stop) break;
DO_WORK();
next_do_work_time+=interval;
}
需要說明的是,這種方法是很消耗CPU的 :)