VS之实现计时器的⼏种⽅法
软件开发中,经常会涉及到计时的操作,下⾯总结下实现计时器的⼏种⽅法。
⽅法⼀:
使⽤SetTimer()和OnTimer()实现计时操作。
SetTimer设置OnTimer的调⽤属性
SetTimer(100,100,NULL);
OnTimer根据SetTimer的设置定时刷新数据
void CDemoView::OnTimer(UINT nIDEvent)
timeout on t2 timer
{
// TODO: Add your message handler code here and/or call default
CView::OnTimer(nIDEvent);
}
⽅法⼆:
精确的时间计时
QueryPerformanceFrequency查询定时器的执⾏频率
QueryPerformanceCounter查询定时器的计数值
//初始化值
DWORD dwMsecond = 0;
LARGE_INTEGER cpuHz, startCnt, targetCnt;
cpuHz.QuadPart    = 0;
startCnt.QuadPart  = 0;
targetCnt.QuadPart = 0;
QueryPerformanceFrequency(&cpuHz);
QueryPerformanceCounter(&startCnt);
//开始计时
QueryPerformanceCounter(&targetCnt);
dwMsecond = (DWORD)((targetCnt.QuadPart - startCnt.QuadPart)/cpuHz.QuadPart*1000);
if (dwMsecond > dwTimeout)
{
}
⽅法三:
GetTickCount是计算机编程中的函数,指返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。
MSG msg;
DWORD dwTimeStarted;
dwTimeStarted = ::GetTickCount();
//等待1000ms
while(::GetTickCount() - dwTimeStarted < 1000)  {
if(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//超过10s退出
if(::GetTickCount() - dwTimeStarted > 10*1000)  {
if(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return ;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。