Visual C ++:如何获取CPU时间?

时间:2009-04-09 09:42:02

标签: winapi visual-c++ mfc

如何使用Visual C ++以编程方式查找System Idle Process(在任务管理器中)中显示的CPU时间?

5 个答案:

答案 0 :(得分:2)

你想要的是这样......

NTSTATUS hStatus;
SYSTEM_PERFORMANCE_INFORMATION             stSysPerfInfo;

hStatus = NtQuerySystemInformation(SystemPerformanceInformation, &stSysPerfInfo, sizeof(stSysPerfInfo), NULL);
if (hStatus != NO_ERROR)
{
  // Do work....
}

或者看看这个“TaskManager”

http://reactos.freedoors.org/Reactos%200.3.8/ReactOS-0.3.8-REL-src/base/applications/taskmgr/

答案 1 :(得分:1)

我没有窗口可以真正知道问题是什么,但也许你可以查看std :: clock标准函数来测量花费的cpu时间。如果您请求该时间两次,则可以通过常量CLOCKS_PER_SEC将经过时间段内的滴答数量转换为秒。

结果将是您的过程花费的CPU时间,这与挂钟不同。它可以在多线程应用程序中更高,或者如果你的代码_sleep_s更低,因为它不会花费时间。

void f()
{
   std::clock_t init = std::clock();
   // perform some operations
   std::clock_t end = std::clock();
   std::cout << end-init << " cpu ticks spent, or about " 
             << (end-init)/CLOCKS_PER_SEC << " seconds." << std::endl;
}

这不会计算第一次测量之前的CPU时间,但它可以以标准方式为您提供近距离测量。

答案 2 :(得分:0)

从未尝试过,但GetProcessTimes似乎是要走的路。

答案 3 :(得分:0)

我将使用WMI性能计数器,特别是Process /%ProcessorTime / Idle。

阅读本文,了解如何在C#中完成此操作 http://www.codeproject.com/KB/dotnet/perfcounter.aspx

并在C ++中:http://msdn.microsoft.com/en-us/library/aa394558(VS.85).aspx

希望这能回答你的问题。

答案 4 :(得分:0)

另见我的帖子:http://osequal.blogspot.com/2009/03/accurate-time-measurement-for.html。特别是,检查英特尔TBB库中的tick_count的实现:http://cc.in2p3.fr/doc/INTEL/tbb/doc/html/a00199.html