![]() |
#2
rjsp2018-12-17 09:38
随手改的,可能代码不严格
![]() #include <windows.h> #include <stdio.h> bool NotSleep( DWORD dwMilliseconds ) { LARGE_INTEGER frequency, starttime; if( !QueryPerformanceFrequency(&frequency) ) return false; if( !QueryPerformanceCounter(&starttime) ) return false; starttime.QuadPart += dwMilliseconds*frequency.QuadPart/1000; for( LARGE_INTEGER curtime; ; ) { if( !QueryPerformanceCounter(&curtime) ) return false; if( curtime.QuadPart >= starttime.QuadPart ) break; } return true; } bool GetThreadTimeU64( unsigned long long& KernelTime, unsigned long long& UserTime ) { FILETIME ct, et, kt, ut; if( !GetThreadTimes(GetCurrentThread(),&ct,&et,&kt,&ut) ) return false; KernelTime = (kt.dwHighDateTime+0ull)<<32 | kt.dwLowDateTime; UserTime = (ut.dwHighDateTime+0ull)<<32 | ut.dwLowDateTime; return true; } void GetTaskTime() { unsigned long long KernelTimeStart, UserTimeStart; GetThreadTimeU64( KernelTimeStart, UserTimeStart ); NotSleep( 1000 ); unsigned long long KernelTimeEnd, UserTimeEnd; GetThreadTimeU64( KernelTimeEnd, UserTimeEnd ); unsigned long long KernelTimeElapsed = KernelTimeEnd - KernelTimeStart; unsigned long long UserTimeElapsed = UserTimeEnd - UserTimeStart; unsigned long long TotalTimeElapsed = KernelTimeElapsed + UserTimeElapsed; printf( "kernel: %llu, user: %llu, the total time elapsed is: %llu\n", KernelTimeElapsed, UserTimeElapsed, TotalTimeElapsed ); } int main( void ) { GetTaskTime(); return 0; } |
这是Windows核心编程中的例子,我照打了一遍,就是添加了需要测试的任务(sleep(1000)),为什么输出结果都是0?求请教.
__int64 FileTimeToQuadWord(PFILETIME pft)
{
return (Int64ShllMod32(pft->dwHighDateTime,32)| pft->dwLowDateTime);
}
void GetTaskTime()
{
FILETIME ftKernelTimeStart,ftKernelTimeEnd;
FILETIME ftUserTimeStart,ftUserTimeEnd;
FILETIME ftDummy;
__int64 qwKernelTimeElapsed,qwUserTimeElapsed,qwTotalTimeElapsed;
GetThreadTimes(GetCurrentThread(),&ftDummy,&ftDummy,&ftKernelTimeStart,&ftUserTimeStart);
//执行的任务
Sleep(1000);
GetThreadTimes(GetCurrentThread(),&ftDummy,&ftDummy,&ftKernelTimeEnd,&ftUserTimeEnd);
qwKernelTimeElapsed=FileTimeToQuadWord(&ftKernelTimeEnd)-FileTimeToQuadWord(&ftKernelTimeStart);
qwUserTimeElapsed=FileTimeToQuadWord(&ftUserTimeEnd)-FileTimeToQuadWord(&ftUserTimeStart);
qwTotalTimeElapsed=qwKernelTimeElapsed+qwUserTimeElapsed;
_tprintf(_T("kernel: %d,uer: %d, the total time elapsed is: %d"),qwKernelTimeElapsed,qwUserTimeElapsed,qwTotalTimeElapsed);
}
int _tmain(int argc, _TCHAR* argv[])
{
GetTaskTime();
system("pause");
return 0;
}