Moin,
also ich habe jetzt mal deine angebliche Heizung implementiert. Wenn ich die Zeit auf 0 setze, dann hast du recht, aber bei 10 ms zeigt die CPU Werte um 0 % an.
So wie der Code da aber steht ist das nicht eine sondern sind es genau 24 Sekunden
Das heißt 3600 * 24 nehmen dann passt es wieder.
Das ist übrigens der Code:
Delphi-Quellcode:
procedure TForm1.BPowerClick(Sender: TObject);
begin
Tick(0); // Heizt!
end;
procedure TForm1.BSleepClick(Sender: TObject);
begin
Tick(10); // Heizt nicht!
end;
procedure TForm1.Tick(WaitTime: Integer);
var
tickTime : extended;
tckCnt : Byte;
begin
tickTime := Now + 1 / 86400;
// Prevent reexecution
BSleep.Enabled := False;
BPower.Enabled := False;
Application.ProcessMessages;
tckCnt := 0;
repeat
while (tickTime - Now) > 0 do
begin
sleep(WaitTime); // in 10 Millisekundenschritten warten bis eine Sekunde um ist
end;
tickTime := tickTime + 1 / 86400; // wieder eine Sekunde weiter gehen
Inc(tckCnt);
lTicks.Caption := IntToStr(tckCnt);
lTicks.Repaint;
until tckCnt >= 5;
BSleep.Enabled := True;
BPower.Enabled := True;
end;
Außerdem die Auslastung als Anhang. Ich habe einen Quadcore, weshalb selbst die Heiße Variante nur 25 % verbraucht. Ich habe dabei 5 Sekunden zuerst die 10 ms Variante ausgeführt (da wo der rote Strich ist) und dann 5 Sekunden die 0 ms Variante (dort wo der Berg ist). Das am Anfang ist der Programmstart.
MfG
Fabian