【发布时间】:2010-12-03 08:15:28
【问题描述】:
有没有办法通过 DLL 调用或其他方式在 windows xp 中获取系统 cpu 负载。我想将调用嵌入到我的程序中,当 CPU 负载达到 100% 时,我想捕捉时间。我的程序每隔几天就会使 cpu 负载最大化,我想准确地确定何时可以进行数据转储和分析数据。
谢谢!
【问题讨论】:
标签: c winapi windows-xp
有没有办法通过 DLL 调用或其他方式在 windows xp 中获取系统 cpu 负载。我想将调用嵌入到我的程序中,当 CPU 负载达到 100% 时,我想捕捉时间。我的程序每隔几天就会使 cpu 负载最大化,我想准确地确定何时可以进行数据转储和分析数据。
谢谢!
【问题讨论】:
标签: c winapi windows-xp
@987654321@ 看起来相关,但似乎(半)不推荐使用/内部使用,不推荐使用。它确实列出了其他要使用的功能的建议。其中,@987654322@ 似乎很有用,如果您以已知的延迟运行两次。
【讨论】:
您可以使用性能计数器。
见"Using the PDH Functions to Consume Counter Data"
您应该使用的具体计数器是处理器时间:
处理器时间是处理器执行非空闲线程的时间百分比。 该计数器被设计为处理器活动的主要指标。 它是通过测量处理器执行空闲进程线程所花费的时间来计算的—— 在每个采样间隔中,并从 100% 中减去该值。 (每个处理器都有一个空闲线程,当没有其他线程准备好运行时,它会消耗周期)。 它可以被看作是花费在有用工作上的样本间隔的百分比。 此计数器显示在采样间隔期间观察到的平均繁忙时间百分比。 它是通过监控服务处于非活动状态的时间,然后从 100% 中减去该值来计算的。
#define _PROCESSOR_COUNTER _T("\\Processor(0)\\% Processor Time")
【讨论】:
显然,您只关心何时/如果您的 程序正在使用 100% 的 CPU。为了使这项工作成为同一进程的一部分,您需要在具有更高优先级的单独线程中运行监控代码(因此即使程序的其余部分正在消耗 100% 的 CPU,它也会运行)。它会花费大部分时间休眠,但会定期调用 GetProcessTimes(),以了解其进程消耗了多少 CPU 时间。
【讨论】: