看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)