2

我遇到了一些代码的情况,我注意到现代处理器上的速度步进功能可能是一个问题。虽然我想我可以创建一个线程来尝试修复它(我发现有些事情表明这根本不是一个好的解决方案),但我试图找到更优雅的东西来禁用该功能,同时其他代码正在运行。现在我做了一些研究,发现了这个,这有助于回答这个问题,并让我想出一些代码。

我的问题是,作为一个预算有限的狂热程序员,我不能跑出去购买具有此功能的计算机来测试它是否真的有效。我尽可能地测试了它们。所以,我想知道是否有人拥有具有该功能的计算机可以告诉我他们是否真的可以工作?

// 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;
4

0 回答 0