2011年5月23日 星期一

C++設定windows timer resolution(計時器的經準度)

不知道各位有沒有經驗
在使用sleep之類的函數時,想要暫停幾個ms(千分之一秒),但是暫停的時間總是過長。
例如想要暫停3ms,卻發現暫停了20ms。
其實這是windows timer內部設定的問題。 
可以透過以下方法解決:

TIMECAPS tc;
UINT     wTimerRes;

if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR)
{
    wxMessageBox(wxT("Error; application can't continue"));
}
wTimerRes = min(max(tc.wPeriodMin, TARGET_RESOLUTION), tc.wPeriodMax);
MMRESULT result= timeBeginPeriod(wTimerRes);
if(result==TIMERR_NOERROR )
    wxMessageBox(wxString::Format(wxT("success:%d"),wTimerRes));
else if(result==TIMERR_NOCANDO)
    wxMessageBox(wxT("set timer resoluion fail"));
else
    wxMessageBox(wxT("set timer resoluion other"));

沒有留言:

張貼留言