【问题标题】:Monitor CPU load on XP programmatically以编程方式监控 XP 上的 CPU 负载
【发布时间】:2010-12-03 08:15:28
【问题描述】:

有没有办法通过 DLL 调用或其他方式在 windows xp 中获取系统 cpu 负载。我想将调用嵌入到我的程序中,当 CPU 负载达到 100% 时,我想捕捉时间。我的程序每隔几天就会使 cpu 负载最大化,我想准确地确定何时可以进行数据转储和分析数据。

谢谢!

【问题讨论】:

    标签: c winapi windows-xp


    【解决方案1】:

    @987654321@ 看起来相关,但似乎(半)不推荐使用/内部使用,不推荐使用。它确实列出了其他要使用的功能的建议。其中,@987654322@ 似乎很有用,如果您以已知的延迟运行两次。

    【讨论】:

      【解决方案2】:

      您可以使用性能计数器。

      "Using the PDH Functions to Consume Counter Data"

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

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

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

      【讨论】:

        【解决方案3】:

        显然,您只关心何时/如果您的 程序正在使用 100% 的 CPU。为了使这项工作成为同一进程的一部分,您需要在具有更高优先级的单独线程中运行监控代码(因此即使程序的其余部分正在消耗 100% 的 CPU,它也会运行)。它会花费大部分时间休眠,但会定期调用 GetProcessTimes(),以了解其进程消耗了多少 CPU 时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-07
          • 2023-03-16
          • 1970-01-01
          相关资源
          最近更新 更多