我遇到了一些代码,我注意到现代处理器上的the speed-stepping feature可能是一个问题。虽然我想我可以创建一个线程,将负载放在处理器上以尝试修复它(我发现一些事情表明这根本不是一个好的解决方案),我试图找到一些更优雅的东西,同时禁用该功能其他代码正在运行。现在我做了一些研究并遇到this,这有助于回答这个问题,并允许我提出一些代码。
我遇到的问题是,作为一名预算有限的发烧友程序员,我无法跑出大门并购买具有此功能的计算机,以便测试它是否真的有效。我测试了这些,尽可能测试它们。所以,我想知道是否有人拥有一台具有该功能的计算机可以告诉我他们是否真的有效?
// following code uses the definitions out of the JEDI project.
function GetCPUThrottle(var min, max: byte): Boolean;
// get CPU throttling info.
// min - minimum CPU throttle value, in % (1-100)
// max - maximum CPU throttle value, in % (1-100)
// Result - does CPU support throttling?
var
PowerCap: TSystemPowerCapabilities;
Status: NTSTATUS;
begin
Result := false;
Status := CallNtPowerInformation(SystemPowerCapabilities, nil, 0, @PowerCap,
SizeOf(PowerCap));
if Status = STATUS_SUCCESS then
begin
Result := PowerCap.ProcessorThrottle;
min := PowerCap.ProcessorMinThrottle;
max := PowerCap.ProcessorMaxThrottle;
end;
end;
function SetCPUThrottle(min, max: byte): Boolean;
// set CPU throttling info.
// min - minimum CPU throttle value, in % (1-100)
// max - maximum CPU throttle value, in % (1-100)
// Result - does CPU support throttling, AND was the values set?
var
PowerCap: TSystemPowerCapabilities;
Status: NTSTATUS;
begin
Result := false;
Status := CallNtPowerInformation(SystemPowerCapabilities, nil, 0, @PowerCap,
SizeOf(PowerCap));
if Status = STATUS_SUCCESS then
begin
if PowerCap.ProcessorThrottle then
begin
PowerCap.ProcessorMinThrottle := min;
PowerCap.ProcessorMaxThrottle := max;
Status := CallNtPowerInformation(SystemPowerCapabilities, @PowerCap,
SizeOf(PowerCap), nil, 0);
if Status = STATUS_SUCCESS then
Result := true;
end;
end;
end;