最小(最大)处理器状态的 API,C++
Posted
技术标签:
【中文标题】最小(最大)处理器状态的 API,C++【英文标题】:API for Minimum(Maximum) Processor State , C++ 【发布时间】:2014-03-20 04:48:04 【问题描述】:我对 windows 中以下可用设置选项的问题: 在 windows 和 Power 选项下 ==> 高级电源设置 ==> 处理器电源管理 ==> 最低处理器状态(可以设置为百分比)
这个值对应的API结构是什么,我想写一个程序可以控制最小和最大处理器状态的百分比。我试过了,SYSTEM_POWER_INFO,SYSTEM_POWER_CAPABILITY,..,没有具体提到这个值。
请指教。
问候,
【问题讨论】:
【参考方案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/…以上是关于最小(最大)处理器状态的 API,C++的主要内容,如果未能解决你的问题,请参考以下文章