#include <iostream> #include <Windows.h> #include <time.h> using namespace std; typedef void (*PFNRUN)(); void RunFunc(); __int64 FileTimeToQuadWord(PFILETIME pft); void PrintRunTimeInfo(PFNRUN pfunRun, __int64& n64KernalElapsed, __int64& n64UserElapsed, __int64& n64TotalElapsed); int main() { __int64 n64KernalElapsed = 0; __int64 n64UserElapsed = 0; __int64 n64TotalElapsed = 0; PrintRunTimeInfo(RunFunc, n64KernalElapsed, n64UserElapsed, n64TotalElapsed); cout << "kernal elapsed time: " << n64KernalElapsed << endl; cout << "user elapsed time: " << n64UserElapsed << endl; cout << "totoal elapsed time: " << n64TotalElapsed << endl; return 0; } void RunFunc() { int i = 0; for (i = 0; i < 100; i++) { cout << "hello, andylin!" << endl; } } __int64 FileTimeToQuadWord(PFILETIME pft) { return (Int64ShllMod32(pft-> dwHighDateTime, 32) | pft->dwLowDateTime); } void PrintRunTimeInfo(PFNRUN pfunRun, __int64& n64KernalElapsed, __int64& n64UserElapsed, __int64& n64TotalElapsed) { FILETIME ftKernalStart; FILETIME ftKernalEnd; FILETIME ftUserStart; FILETIME ftUserEnd; FILETIME ftDummy; //get start time; GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernalStart, &ftUserStart); //do run function pfunRun(); //get end time GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernalEnd, &ftUserEnd); n64KernalElapsed = FileTimeToQuadWord(&ftKernalEnd) - FileTimeToQuadWord(&ftKernalStart); n64UserElapsed = FileTimeToQuadWord(&ftUserEnd) - FileTimeToQuadWord(&ftUserStart); n64TotalElapsed = n64KernalElapsed + n64UserElapsed; }