Also...
Hier gibt es ja schon viele Fragen und Antworten... Aber.
Delphi-Quellcode:
while not Terminated do
begin
//hier erfolgt eine Signalisierung über WaitForSingleObject und bei Timeout (=250ms), erfolgt der zyklische Aufruf unten
if WaitForsingleObject(Irgendwas, 250, xxxx) = WAIT_OBJECT_0 do
begin
end;
//zyklischer Aufruf
TC := GetTickCount;
//Synchronize(MeineFunktion);
Queue(Nil, MeineFunktion);
TC2 := GetTickCount - TC;
//Protokollierung von TC2...
end;
Das ist natürlich der klassische Fehler für die Verwendung eines Threads (Übrings genau das behandle ich in meinem
Talk in Amsterdam).
In einem Thread Queue aufzurufen ist natürlich nicht das Problem, aber nur um "Kleinigkeiten" auf der UI darzustellen. Die eigentliche Verarbeitung muss im Thread passieren.
WaitForsingleObject kann man nehmen, aber ich würde ein TEvent verwenden.
Da der Server ja immer nur eine Datenpacket nach dem anderen Empfängt würde ich die Aufgabe nicht an N-Thread pro N-Client weiter geben sondern das Datenpacket in eine Threadsichere Quere packen, die von X-Threads abgearbeitet werden.
Nur so ein paar gedanken.
Mavarik