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);
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)然后是微秒级延时:LARGE_INTEGER litmp ;LONGLONG QPart1,QPart2 ;double d=0;QueryPerformanceCounter(&litmp) ; // 获得初始值QPart1 = litmp.QuadPart ;while (d40)//你想要的时间{ QueryPerformanceCounter(&litmp) ; QPart2 = litmp.QuadPart ; d=(double)(QPart2 - QPart1);}。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)最后,如果还不能满足,那就去做时钟周期的延时吧:
#define NOP_COUNT 3//需要自己根据NOP及LOOP的指令周期计算.__asm { MOV ECX, NOP_COUNTDELAY: NOP LOOP DELAY }不过,用VC做这个工作是不是有点……