Eine Schleife mit permanentem ProcessMessage führt auch unter XP zu Verzögerungen, nur anscheinend nicht so massiv. Kenne das von Delphi 7.
Wenn ich so eine Schleife machen muss, dann kommt da immer auch ein Sleep rein, welche Wartezeit im Sleep steht, ist dann immer etwas von der zu erledigenden Aufgabe abhängig.
Wie bra schon schrieb, bitte mindestens in sowas der Art abändern:
Delphi-Quellcode:
procedure TLegacySerialProgrammerModule.ComPortAdapterSendChar(
Sender: TObject; const Value: Char; const ContentType: TContentType);
begin
while ComPort1.OutBuffUsed>0 do
begin
// Hier prüfen, ob es ruhig etwas länger
// als 20 Millisekunden sein darf,
// Tendenz eher in Richtung höher Wartezeit.
Sleep(20);
application.ProcessMessages;
end;
if ComPort1.Open then
begin
ComPort1.PutChar(Value);
end;
end;
Aus einem meiner Programme weiß ich, dass mit Delphi 7 unter XP eine Schleife mit einem Sleep unter 20 Millisekunden, auf 'nem recht alten Rechner, zu einem massiven Anstieg der CPU-Last führt, man beschäftigt so Windows ausschließlich mit der Verarbeitung der Messages. Aber ein sinnvolles aktives Warten kann man so nicht wirklich realisieren.
Optimal ist so eine Lösung nicht, aber zumindest mit 'nem überschaubaren Aufwand zu realisieren. Ihr müsstest aber gründlich testen, mit welcher Wartezeit ihr hier arbeiten könnt, damit keine anderen Nebenwirkungen auftreten.