我正在測試從我的同事提供的一個代碼,我需要測量執行一個例程的執行時間,而不是執行(線程)上下文切換的時間。C GetTickCount(windows函數)到時間(納秒)
什麼是測量時間的最佳選擇?我知道,可高精度計時器一樣,
QueryPerformanceCounter
QueryPerformanceFrequency
,但我怎麼能翻譯使用計時器來毫秒或納秒?
我正在測試從我的同事提供的一個代碼,我需要測量執行一個例程的執行時間,而不是執行(線程)上下文切換的時間。C GetTickCount(windows函數)到時間(納秒)
什麼是測量時間的最佳選擇?我知道,可高精度計時器一樣,
QueryPerformanceCounter
QueryPerformanceFrequency
,但我怎麼能翻譯使用計時器來毫秒或納秒?
由於比我執行操作在500毫微秒的訂單,以及定時器好好嘗試一下具有高精度,我做了什麼了,
我保存的實際時間的GetTickCount() - (使用的精度〜 12milis),並執行路線N_TIMES(比例程執行的次數)的剩餘時間,直到我按下控制檯上的某些東西。
重新計算的時間,賺取差價由N_TIMES,類似的東西劃分:
INT靜態計數器;
空隙例程() { //操作這裏.. 計數器++; }
int main(){
start < - GetTickCount(); handle < - createThread(.....,routine,...);
resumeThread(handle);getchar();
WaitForSingleObject(handle,INFINITE);
Elapsed =(GetTickCount() - start)* 1000000.0)/ counter; printf(「Nanos:%d」,elapsed); }
:)
LARGE_INTEGER lFreq, lStart; LARGE_INTEGER lEnd; double d; QueryPerformanceFrequency(&lFreq); QueryPerformanceCounter(&lStart); /* do something ... */ QueryPerformanceCounter(&lEnd); d = ((doublel)End.QuadPart - (doublel)lStart.QuadPart)/(doublel)lFreq.QuadPart;
d是以秒爲單位的時間間隔。
雙d_ms = d * 1000.0; – 2010-09-24 12:54:32
不工作,當執行方法保持10秒時返回1.0 – anotherNeo 2010-09-24 13:05:42
我猜測它不工作的原因是上面的代碼執行整數除法,然後將其轉換爲double。嘗試'd =((double)(lEnd.QuadPart -lStart.QuadPart))/ lFreq.QuadPart);'而是看看是否有幫助。 – torak 2010-09-24 13:15:55