作者jokingfish (ㄚ魚!!)
看板C_and_CPP
標題[問題] 請教一下有關GetTickCount
時間Wed Nov 7 12:17:02 2012
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
問題(Question):
想請教一下 GetTickCount 回傳的應該是系統啟動以來已經過的毫秒數
有什麼函式會更動到這個毫秒數嗎?
個人用三種計時方式算出來的時間天差地遠
1.累加每次的結束-開始的時間差
2.直接在最外層計算結束-開始的時間差
3.直接用手機碼表手動量測
預期的正確結果(Expected Output):
時間2 約等於 時間3
錯誤結果(Wrong Output):
時間1 = 64576ms
時間2 = 91076784ms
時間3 = 1:37.8sec
程式碼(Code):(請善用置底文網頁, 記得排版)
DWORD t_start = GetTickCount();
DWORD t_all = 0, t_single_start, t_single_end;
for(int i=0;i<2000;i++)
{
t_single_start = GetTickCount();
function_A(); //function_A為主要計算函式 主要耗時在此
t_single_end = GetTickCount();
t_all += t_single_end - t_single_start;
function_B();
function_C();
.
.
}
DWORD t_end = GetTickCount();
DWORD t1 = t_all;
DWORD t2 = t_end - t_start;
補充說明(Supplement):
因為主要是修改了 function_A的演算法 所以要計算其改善效率
但是整體來說還是要比較使用者執行一次程式所耗時間,故一開始是用時間2的方法去算
其結果整個嚇一跳,遂用時間1和手機碼表(時間3)的方法去計時
算出來的結果就較為接近想像中的狀態
想請問是否有地方沒注意到?還是其他的Function會有動到時間的可能?
抑或是GetTickCount() 在經過多長時間之後會失準?
還請知道的版友幫忙解惑 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.117.112.106
→ azureblaze:t_all += t_single_end - t_single_start才對吧? 11/07 12:24
→ azureblaze:然後GetTickcount精度只有10~16ms 所以1會不準 11/07 12:27
→ azureblaze:至於2和3你應該其他地方寫錯了 11/07 12:29
阿 不好意思 是KEY過來的時候寫錯 不是程式寫錯 感謝指正
※ 編輯: jokingfish 來自: 122.117.112.106 (11/07 13:37)