以编程方式监视XP上的CPU负载

时间:2009-10-02 14:08:31

标签: c winapi windows-xp

有没有办法通过DLL调用或其他方式获取Windows XP中的系统CPU加载。我想在我的程序中嵌入调用,当CPU负载达到100%时,我想捕获时间。我的程序每隔几天就会超出cpu负载,而且我想确切地知道何时可以进行数据转储并分析数据。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用效果计数器。

请参阅"Using the PDH Functions to Consume Counter Data"

您应使用的具体计数器是处理器时间:

处理器时间是处理器执行非空闲线程的时间百分比。 此计数器被设计为处理器活动的主要指标。 它是通过测量处理器执行空闲过程线程所花费的时间来计算的 - 在每个采样间隔中,并从100%中减去该值。 (每个处理器都有一个空闲线程,当没有其他线程准备好运行时,它会消耗周期)。 它可以被视为执行有用工作所花费的采样间隔的百分比。 此计数器显示采样间隔期间观察到的繁忙时间的平均百分比。 它通过监视服务处于非活动状态的时间,然后从100%中减去该值来计算。

#define _PROCESSOR_COUNTER _T("\\Processor(0)\\% Processor Time")

答案 1 :(得分:0)

NtQuerySystemInformation()看似相关,但似乎(半)弃用/内部,不建议使用。它列出了要使用的其他功能的建议。其中,似乎GetSystemTimes()应该是有用的,如果你以两个之间的已知延迟运行它。

答案 2 :(得分:0)

显然你只关心/如果你的程序正在使用100%的CPU。为了使这项工作成为同一过程的一部分,您需要在具有提升优先级的单独线程中运行moinitoring代码(因此即使程序的其余部分消耗100%的CPU,它也会运行)。它将大部分时间都处于休眠状态,但会定期调用GetProcessTimes(),以了解其进程消耗的CPU时间。