程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VC函數中的延時操作

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做這個工作是不是有點……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved