运行时间
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));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.