Winapi visualc&x2B+;:如何获得CPU时间? 用VisualC++ +

Winapi visualc&x2B+;:如何获得CPU时间? 用VisualC++ +,winapi,visual-c++,mfc,Winapi,Visual C++,Mfc,> p>不可编程地找出在系统空闲进程< /代码>(任务管理器)中显示的CPU时间,但似乎没有办法,但是 你想要的是这样的……/p> NTSTATUS hStatus; SYSTEM_PERFORMANCE_INFORMATION stSysPerfInfo; hStatus = NtQuerySystemInformation(SystemPerformanceInformation, &stSysPerfInfo, sizeof(stSysPerfInfo),

> p>不可编程地找出在<代码>系统空闲进程< /代码>(任务管理器)中显示的CPU时间,但似乎没有办法,但是

你想要的是这样的……/p>
NTSTATUS hStatus;
SYSTEM_PERFORMANCE_INFORMATION             stSysPerfInfo;

hStatus = NtQuerySystemInformation(SystemPerformanceInformation, &stSysPerfInfo, sizeof(stSysPerfInfo), NULL);
if (hStatus != NO_ERROR)
{
  // Do work....
}
或者看看这个“任务管理器”


我没有一个窗口来真正了解问题所在,但也许您可以查看std::clock标准函数来测量cpu使用时间。如果您两次请求该时间,则经过的时间段内的滴答声量可以通过恒定的时钟每秒转换为秒

结果将是您的进程所花费的CPU时间,这将不同于挂钟。在多线程应用程序中,它可以更高,如果代码处于睡眠状态,它可以更低,因为它不会花费时间

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;
}
void f()
{
std::clock_t init=std::clock();
//执行一些操作
std::clock_t end=std::clock();

std::cout我会使用WMI性能计数器,特别是Process/%ProcessorTime/Idle

阅读这篇文章,了解如何在C#

在C++中:

希望这能回答您的问题。

另请参阅我的帖子:。特别是,请检查“英特尔TBB库”中“勾号计数”的实现: