Hallo, ist hier noch wer ?
Ich habe mal versucht und hoffentlich nichts vergessen, einige Punkte zu zeitkritischen Programmen unter 2000/XP aufzuschreiben:
1.
PriorityClass von MainProcess hochsetzen - Vorsicht, kann ganzen Computer
lahmlegen - dafür aber die ThreadPriority (vom MainProcess) so niedrig wie möglich
Delphi-Quellcode:
if SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS) then
begin
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_IDLE);
end;
2.
die originale Zeitauflösung von 2000/XP ist auf 10ms gesetzt, deshalb
Delphi-Quellcode:
TimePeriod := 1;
// die Zeitauflösung auf einen Wert < 10, der Windows genehm ist, setzen
while (timeBeginPeriod(TimePeriod) = TIMERR_NOCANDO) and (TimePeriod < 10) do
Inc(TimePeriod);
und am Schluß wieder zurücksetzen
Delphi-Quellcode:
if TimePeriod <> 10 then
timeEndPeriod(TimePeriod);
3.
Thread erzeugen, der zeitkritischen Arbeit ausführen soll (das ist das Schnellste, was geht)
Delphi-Quellcode:
MyThread := TMyThread.Create(True);
MyThread.Priority := tpTimeCritical;
4.
in Loop vom Thread auf keinem Fall
Sleep(1);
oder
WaitForSingleObject
oder etwas ähnliches vergessen, um Windows Luft zum Atmen zu lassen
Ich hoffe, es hilft.