在 Windows 計時

最近在幫研究論文成果算時間,需要計算程式所耗費的時間;本來是用標準的 time.h 來處理,但是為了取得更精準的時間,需要取到毫秒(millisecond, 10^-3),原本的就不適合了。

找了一下發現要用系統的 ticks 來計算; ticks 是從系統開始運行後 CPU 跑的圈數,所以 ticks 數除上 CPU 的速度,就是經過的時間;以現在的電腦來說,精準度都可以達到 nanosecond(10^-9) 才對。

以下是程式的寫法:

 LARGE_INTEGER ticksPerSecond;
 LARGE_INTEGER start_tick;
 LARGE_INTEGER end_tick;
 double elapsed; // 經過時間
 QueryPerformanceFrequency(&ticksPerSecond); // CPU 每秒跑幾個 ticks
 QueryPerformanceCounter(&start_tick); // 開始時系統計數器位置
 myfunc(); // 要測試的 function call
 QueryPerformanceCounter(&end_tick);  // 結束時系統計數氣位置
 elapsed = ((double)(end_tick.QuadPart – start_tick.QuadPart) / ticksPerSecond.QuadPart); // 經過的時間, 依自己程式需求選擇精準度
 

接下來就可以再用 elapsed 去算其他數據了。

好吧,我承認我自己覺得問這個問題很丟臉,所以 blog 一下來賺流量…

 

9 thoughts on “在 Windows 計時

  1. Pingback: 抓~ 抓到一隻瞌睡蟲 Blogger 分站

  2. Pingback: 抓~ 抓到一隻瞌睡蟲

  3. pjhuang

    vb 中可用這個宣告,取得到毫秒的時間。我想你也可用這個DLL的函數。

    Private Declare Function timeGetTime Lib “winmm.dll” () As Long

  4. icyjingle

    我用了你的方法,可以得到nanosec的elapsed time. 我还想请问,call function QueryPerformanceCounter() 会不会引起overhead?

  5. Pingback: 在 Win32 下抓取時間 [JeffHung.Blog]

  6. Pingback: MidiMall Forum ::

  7. Pingback: high resolution time « Life is not enough

Comments are closed.