VC函数中的延时操作
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做这个工作是不是有点……
- 上一篇:VC使用CComboBox控件
- 下一篇:VC++ 中对注册表的操作