《编程之美》中的“让CPU占用率曲线听你指挥”一题,作者给出的解法3非常清晰简洁。其思想就是直接查询当前CPU占用率,若过高则Sleep一段时间,否则一直循环。代码使用C#编写。于是自己想将这一思路使用C/C++来实现。
那么首先需要查清楚windows提供了哪些操作性能监视器(perfmon.msc)的API。在网上搜索一下,在vckbase上有一篇文章恰好是讲解这一主题的。这些操作性能监视器的API都以pdh开头。只要知道这一点,就可以在MSDN上查到完整资料。
在MSDN中的索引中输入PDH,列出的第一条主题就是:Platform SDK: Performance Monitoring—Using the PDH Interface.这篇概述文章中描述了PDH可以做什么以及如何使用它们。使用PDH接口操作性能监视器的方法可以概括为以下五个步骤:
1. 创建一个查询(Create a query)。相关的API是PdhOpenQuery。
2. 在已创建的查询中添加一个或多个计数器(Add counters to the query)。相关的API是PdhAddCounter。这个API需要一个描述计数器的字符串参数。MSDN上给出了四种构造符合语法的字符串的方法。其中最容易的方法是使用PdhMakeCounterPath函数。
3. 收集性能数据(collect the performance data)。与此相关的API是PdhCollectQueryData。
4. 处理这此收集到的性能数据(Process the performance data)。与此相关的有数个API。PdhGetFormattedCounterValue这个函数用来获得指定格式的数据。
5. 完成任务后,关闭这个查询(Close the query)。相关的API是PdhCloseQuery。
以上五步中第二步构造描述计数器的字符串有些陌生。它牵扯到一个数据结构,这个数据结构的定义如下:
在C/C++代码中使用windows性能监视器
最新推荐文章于 2022-05-27 21:45:00 发布