作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想在 C++ 算法上运行一些基准测试,并希望根据输入获得它所需的 CPU 时间。我在 Windows 7 上使用 Visual Studio 2012。我已经发现了一种在 Windows 中计算 CPU 时间的方法:How can I measure CPU time and wall clock time on both Linux/Windows?
但是,我使用 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()-command 时,它不会:
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,这是否可能?
最佳答案
Linux:
关于c++ - 如何在 Windows 上使用 C++ 测量 CPU 时间并包括 system() 的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19976901/
我是一名优秀的程序员,十分优秀!