Zitat von
Thorus:
Hallo,
ich habe einen Thread, der das tut was er soll. Das Problem ist nur, dass die Prozessorleistung immer auf 100% ist.
Code:
uses rdtsc;
procedure TMyThread.Execute;
var
Zeit:int64;
begin
Zeit := cpuGetTick;
while not Terminated do
begin
if cpuGetMs(a1) > 9 then
begin
Zeit := cpuGetTick;
Synchronize(TueEtwas);
end;
end;
end;
Dieser Thread ruft die Methode TueEtwas maximal so 100 mal in der Sekunde auf.
Warum hast du dafür einen Thread, wenn du doch alles im Kontext des Hauptthreads deines Fensters ausführst? Dein Problem ist einfach ein Designfehler.
Zitat:
Ich hatte auch probiert vor "if cpuGet.." Sleep(1) zu setzen. Dies funktioniert zwar, ist aber viel zu langsam. Mit Sleep war die Prozessorbelastung aber minimal, so wie es sein sollte.
75-100 mal pro Sekunde sollten es schon sein.
Das Problem bei Sleep ist auch, dass, wenn für das auszuführende TueEtwas 10 ms verbraucht werden, dann wartet er mit Sleep trotzdem noch eine Weile, obwohl TueEtwas eigentlich sofort wieder ausgeführt werden sollte.
Hier fehlt wohl das Verständnis, was Sleep eiegntlcih macht. Deswegen:
Sleep.