码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-08 09:07:25      阅读:1272      评论:0      收藏:0      [点我收藏+]

标签: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 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 ;
}


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

标签:vs   计时器   

原文地址:http://blog.csdn.net/bingdianlanxin/article/details/43613325

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!