VS之实现计时器的几种方法

软件开发中,经常会涉及到计时的操作,下面总结下实现计时器的几种方法。


方法一:

使用SetTimer()和OnTimer()实现计时操作。

SetTimer设置OnTimer的调用属性

	SetTimer(100,100,NULL);
OnTimer根据SetTimer的设置定时刷新数据
void CDemoView::OnTimer(UINT nIDEvent) 
{// TODO: Add your message handler code here and/or call defaultCView::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 ;
}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部