WEB开发网
开发学院软件开发VC VC中基于 Windows 的精确定时 阅读

VC中基于 Windows 的精确定时

 2006-07-20 11:41:47 来源:WEB开发网   
核心提示: 方式二:VC中使用sleep()函数实现延时,它的单位是ms,VC中基于 Windows 的精确定时(2),如延时2秒,用sleep(2000),CPU占用率非常高,只能用于要求不高的延时程序中,精度非常 低,最小计时精度仅为30ms

方式二:VC中使用sleep()函数实现延时,它的单位是ms,如延时2秒,用sleep(2000)。精度非常 低,最小计时精度仅为30ms,用sleep函数的不利处在于延时期间不能处理其他的消息,如果时间太 长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer2。

方式三:利用COleDateTime类和COleDateTimeSpan类结合WINDOWS的消息处理过程来实现秒级延时。如示例工程中的Timer3和Timer3_1。以下是实现2秒的延时代码:

COleDateTime   start_time = COleDateTime::GetCurrentTime();
   COleDateTimeSpan end_time= COleDateTime::GetCurrentTime()-start_time;
   while(end_time.GetTotalSeconds()< 2) //实现延时2秒
   {
       MSG  msg;
       GetMessage(&msg,NULL,0,0);
       TranslateMessage(&msg);
       DispatchMessage(&msg);
       
       //以上四行是实现在延时或定时期间能处理其他的消息,
       //虽然这样可以降低CPU的占有率,
       //但降低了延时或定时精度,实际应用中可以去掉。
       end_time = COleDateTime::GetCurrentTime()-start_time;
   }//这样在延时的时候我们也能够处理其他的消息。   

方式四:在精度要求较高的情况下,VC中可以利用GetTickCount()函数,该函数的返回值是  DWORD型,表示以ms为单位的计算机启动后经历的时间间隔。精度比WM_TIMER消息映射高,在较 短的定时中其计时误差为15ms,在较长的定时中其计时误差较低,如果定时时间太长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer4和Timer4_1。下列代码可以实现50ms的精确定时:

上一页  1 2 3 4 5  下一页

Tags:VC 基于 Windows

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接