運行時間

C/C++ code
FILETIME ct; FILETIME et; FILETIME kt; FILETIME ut; __int64 ktStart=0; __int64 utStart=0; __int64 ktStop=0; __int64 utStop=0; LARGE_INTEGER ss,ee,fq; HANDLE cur; int i,j,dump; cur = GetCurrentThread(); QueryPerformanceCounter(&ss); //QueryPerformanceCounter的單位應該是cpu的時間週期時間,1/cpu頻率 GetThreadTimes(cur,&ct,&et,&kt,&ut); // 起始時的內核時間和用戶時間。不過精度也就10ms級 ktStart = (((__int64)kt.dwHighDateTime)<<32) + (__int64)kt.dwLowDateTime; utStart = (((__int64)ut.dwHighDateTime)<<32) + (__int64)ut.dwLowDateTime; // put your code here, such as: Sleep(10000); //sleep消耗的不是程序所用的時間。scanf函數等待的時間等也一樣不是程序消耗的時間 for(i=0;i<10000;i++) { dump = 0; for(j=0;j<10000;j++) { dump += j*j; } } // finish GetThreadTimes(cur,&ct,&et,&kt,&ut); // 結束時的內核時間和用戶時間 ktStop = (((__int64)kt.dwHighDateTime)<<32) + (__int64)kt.dwLowDateTime; utStop = (((__int64)ut.dwHighDateTime)<<32) + (__int64)ut.dwLowDateTime; printf("Kernel Time: %llu ms/n", (ktStop - ktStart)/10000); //FILETIME的單位是100ns,除10000變ms printf("User Time: %llu ms/n", (utStop - utStart)/10000); QueryPerformanceCounter(&ee); QueryPerformanceFrequency(&fq); // QueryPerformanceCounter高精度的,但記得並不是代碼實際消耗的時間。會把sleep的那10秒也計入。 printf("Time: %llu us/n", (ee.QuadPart-ss.QuadPart)/(fq.QuadPart/1000000));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章