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(Zeit) > 9 then
begin
Zeit := cpuGetTick;
Synchronize(TueEtwas);
end;
end;
end;
Dieser Thread ruft die Methode TueEtwas maximal so 100 mal in der Sekunde auf.
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.
Wenn Sleep(1) wirklich nur 1 ms brauchen würde, wär das ja ok, aber das tut es wohl nicht.