我想在 C++ 算法上运行一些基准测试,并希望根据输入获得所需的 CPU 时间。我在 Windows 7 上使用 Visual Studio 2012。我已经发现了一种在 Windows 中计算 CPU 时间的方法:如何在 Linux/Windows 上测量 CPU 时间和挂钟时间?
但是,我在我的算法中使用了system()命令,但不是以这种方式测量的。那么,如何测量 CPU 时间并通过 system() 包含脚本调用的时间?
我应该添加一个小例子。这是我的 get_cpu_time 函数(来自上述链接):
double get_cpu_time(){
FILETIME a,b,c,d;
if (GetProcessTimes(GetCurrentProcess(),&a,&b,&c,&d) != 0){
// Returns total user time.
// Can be tweaked to include kernel times as well.
return
(double)(d.dwLowDateTime |
((unsigned long long)d.dwHighDateTime << 32)) * 0.0000001;
}else{
// Handle error
return 0;
}
}
到目前为止效果很好,当我制作一个程序,对一些数组进行排序(或做一些其他需要一些时间的事情)时,它工作得很好。但是,当我在这种情况下使用 system() 命令时,它不会:
int main( int argc, const char* argv[] )
{
double start = get_cpu_time();
double end;
system("Bla.exe");
end = get_cpu_time();
printf("Everything took %f seconds of CPU time", end - start);
std::cin.get();
}
给定 exe 文件的执行以相同的方式测量,大约需要 5 秒。当我通过 system() 运行它时,整个过程需要 0 秒的 CPU 时间,这显然不包括 exe 文件的执行。
一种可能性是在系统调用上获得一个 HANDLE,这可能吗?