如何使用Visual C ++以编程方式查找System Idle Process
(在任务管理器中)中显示的CPU时间?
答案 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