【问题标题】:API for Minimum(Maximum) Processor State , C++最小(最大)处理器状态的 API,C++
【发布时间】:2014-03-20 04:48:04
【问题描述】:

我对 windows 中以下可用设置选项的问题: 在 windows 和 Power 选项下 ==> 高级电源设置 ==> 处理器电源管理 ==> 最低处理器状态(可以设置为百分比)

这个值对应的API结构是什么,我想写一个程序可以控制最小和最大处理器状态的百分比。我试过了,SYSTEM_POWER_INFO,SYSTEM_POWER_CAPABILITY,..,没有具体提到这个值。

请指教。

问候,

【问题讨论】:

    标签: c++ processor power-management


    【解决方案1】:

    显然有一个名为WriteProcessorPwrScheme的Windows函数:

    BOOLEAN WINAPI WriteProcessorPwrScheme(
      _In_  UINT ID,
      _In_  PMACHINE_PROCESSOR_POWER_POLICY pMachineProcessorPowerPolicy
    );
    

    资料来源:this SO question 中的 C# 答案告诉我。按照文档查看 PMACHINE_PROCESSOR_POWER_POLICY 结构中的所有内容。

    不过,根据文档,该功能不会影响当前的系统电源策略。您需要拨打SetActivePwrScheme

    BOOLEAN WINAPI SetActivePwrScheme(
      _In_      UINT uiID,
      _In_opt_  PGLOBAL_POWER_POLICY lpGlobalPowerPolicy,
      _In_opt_  PPOWER_POLICY lpPowerPolicy
    );
    

    如果SetActivePwrScheme 不起作用或您的Windows 版本不支持,您可以致电PowerSetActiveScheme

    DWORD WINAPI PowerSetActiveScheme(
      _In_opt_  HKEY UserRootPowerKey,
      _In_      const GUID *SchemeGuid
    );
    

    因此看来您必须首先使用WriteProcessorPwrScheme 创建一个电源方案,它将一个索引更改为一组电源方案,然后您必须使用该索引调用SetActivePwrScheme 来激活它。

    【讨论】:

    • 感谢 AndyG,我可以设置方案,但是如果有人可以帮助我直接调整百分比,那将会很有用。
    • @Yasz:如果你深入了解PPOWER_POLICY 结构,你最终会遇到ForcedThrottleAc:当计算机在AC 上运行时系统施加的处理器节流级别(实用程序) 功率,以百分比表示。和ForcedThrottleDc:当计算机依靠电池供电运行时系统将施加的处理器节流级别,以百分比表示。
    • 感谢您的帮助:)
    【解决方案2】:

    您可以使用修改任何电源方案

    PowerWriteACValueIndex()/PowerWriteDCValueIndex()
    

    第一个参数为NULL, 第二个参数——所需电源方案的 GUID (GUID_MAX_POWER_SAVINGS/GUID_MIN_POWER_SAVINGS/GUID_TYPICAL_POWER_SAVINGS), 第三个参数——GUID_PROCESSOR_SETTINGS_SUBGROUP, 第四个参数 -- GUID_PROCESSOR_THROTTLE_MAXIMUM 或 GUID_PROCESSOR_THROTTLE_MINIMUM

    所有的 GUID 描述都可以在 winnt.h 中找到

    【讨论】:

    • 太棒了!根据您发布的内容,我已经能够编写一个完整的程序来更改最低处理器状态,然后通过复制当前电源方案,编辑副本,使副本处于活动状态,然后恢复原始状态,将其更改回来计划积极。代码在这里:dreamincode.net/forums/topic/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多