我想测量某些功能的CPU时间。我知道如何使用GetProcessTimes
,但我在通过某种“重启”来实现它时遇到了问题:
通常,我会这样做:
#include "stdafx.h"
#include <math.h>
#include <windows.h>
double cputimer()
{
FILETIME createTime;
FILETIME exitTime;
FILETIME kernelTime;
FILETIME userTime;
if ( GetProcessTimes( GetCurrentProcess( ),
&createTime, &exitTime, &kernelTime, &userTime ) != -1 )
{
SYSTEMTIME userSystemTime;
if ( FileTimeToSystemTime( &userTime, &userSystemTime ) != -1 )
return (double)userSystemTime.wHour * 3600.0 +
(double)userSystemTime.wMinute * 60.0 +
(double)userSystemTime.wSecond +
(double)userSystemTime.wMilliseconds / 1000.0;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
double start, stop;
long sum = 0L;
start = cputimer();
for (long long i = 1; i < 10000000; i++){
sum += log((double)i);
}
stop = cputimer();
printf("Time taken: %f [seconds]\n", stop - start);
return 0;
}
但是使用“重置”我不确定我是否有正确的结果:
#include "stdafx.h"
#include <math.h>
#include <windows.h>
#define START 1
#define STOP 0
double cputimer(int reset)
{
FILETIME createTime;
FILETIME exitTime;
FILETIME kernelTime;
FILETIME userTime;
double now = 0, then = 0;
if ( GetProcessTimes( GetCurrentProcess( ),
&createTime, &exitTime, &kernelTime, &userTime ) != -1 )
{
SYSTEMTIME userSystemTime;
if ( FileTimeToSystemTime( &userTime, &userSystemTime ) != -1 )
now = (double)userSystemTime.wHour * 3600.0 +
(double)userSystemTime.wMinute * 60.0 +
(double)userSystemTime.wSecond +
(double)userSystemTime.wMilliseconds / 1000.0;
}
if(reset)
{
then = now;
}
else
{
then = now - then;
}
return then;
}
int _tmain(int argc, _TCHAR* argv[])
{
double s;
long sum = 0L;
cputimer(START);
for (long long i = 1; i < 10000000; i++){
sum += log((double)i);
}
s = cputimer(STOP);
printf("Time taken: %f [seconds]\n", s);
return 0;
}
我做得对吗?