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 ;
}


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值