龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC函数中的延时操作

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
VC函数中的延时操作 我在这里把论坛里能见到的几种延时方式总结一下。 COleDateTime start_time = COleDateTime::GetCurrentTime(); COleDateTimeSpan end_time = COleDateTime::GetCurrentTime() - start_time; while(end_ti

  VC函数中的延时操作

  我在这里把论坛里能见到的几种延时方式总结一下。

COleDateTime  start_time = COleDateTime::GetCurrentTime();

 COleDateTimeSpan  end_time = COleDateTime::GetCurrentTime() - start_time; 

while(end_time.GetTotalSeconds()  <=  2)

 {    MSG  msg;    GetMessage(&msg,NULL,0,0);  

 TranslateMessage(&msg);

   DispatchMessage(&msg);   

end_time = COleDateTime::GetCurrentTime() - start_time;  }

  还有一点说明,因为COleDateTimeSpan类的成员函数还有:GetTotalMinutes、GetTotalHours、GetTotalDays,能够实现更大时间段的延时。

    往更小的时间跨度上说,执行毫秒级的延时用GetTickCount就行:DWORD dwStart = GetTickCount();DWORD dwEnd = dwStart;do{    MSG  msg;    GetMessage(&msg,NULL,0,0);    TranslateMessage(&msg);    DispatchMessage(&msg);    dwEnd = GetTickCount();  } while((dwEnd - dwStart)  <=  2000);

    然后是微秒级延时:LARGE_INTEGER  litmp ;LONGLONG  QPart1,QPart2 ;double d=0;QueryPerformanceCounter(&litmp) ; // 获得初始值QPart1 = litmp.QuadPart ;while (d<40)//你想要的时间{    QueryPerformanceCounter(&litmp) ;    QPart2 = litmp.QuadPart ;    d=(double)(QPart2 - QPart1);}。

  最后,如果还不能满足,那就去做时钟周期的延时吧:

#define NOP_COUNT 3//需要自己根据NOP及LOOP的指令周期计算.__asm {  MOV ECX, NOP_COUNTDELAY: NOP  LOOP DELAY }不过,用VC做这个工作是不是有点……

精彩图集

赞助商链接