2010-09-24 143 views
2

我正在測試從我的同事提供的一個代碼,我需要測量執行一個例程的執行時間,而不是執行(線程)上下文切換的時間。C GetTickCount(windows函數)到時間(納秒)

什麼是測量時間的最佳選擇?我知道,可高精度計時器一樣,

QueryPerformanceCounter 
QueryPerformanceFrequency 

,但我怎麼能翻譯使用計時器來毫秒或納秒?

回答

1

由於比我執行操作在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); }

:)

3
 
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是以秒爲單位的時間間隔。

+0

雙d_ms = d * 1000.0; – 2010-09-24 12:54:32

+0

不工作,當執行方法保持10秒時返回1.0 – anotherNeo 2010-09-24 13:05:42

+1

我猜測它不工作的原因是上面的代碼執行整數除法,然後將其轉換爲double。嘗試'd =((double)(lEnd.QuadPart -lStart.QuadPart))/ lFreq.QuadPart);'而是看看是否有幫助。 – torak 2010-09-24 13:15:55