2017-04-26 2 views
0

Anfang dieser Woche konnte ich einen Delphi UDPClient zum Laufen bringen (mit Hilfe). Jetzt muss ich die Client-Prozedur in einer separaten Einheit und in einem eigenen Thread ausführen. Gibt es ein einfaches Beispiel oder zumindest Pseudo-Code, den jemand teilen kann? Ich sollte vermeiden, TForm im Thread zu verwenden, da ich die zurückgegebenen Daten aus dem Thread abrufen und in TMemo-Feld anzeigen werde. Ich habe ein spezielles Problem mit der vollständigen Definition meines Typs IdUPDClient.UDPClient im separaten Thread Delphi

Antwort

1

Sie können eine TTask verwenden, um Code in einem getrennten Thread auszuführen, fügen Sie zu verwendet System.Threading.

TTask.run(procedure 
    var UDPClient : TIdUDPClient; 
    begin 
    UDPClient := TIdUDPClient.Create(self); 
    UDPClient.Host := 'put your host'; 
    UDPClient.Port := 0;//PUT YOUR PORT 
    UDPClient.ReceiveTimeout := 5000; 
    UDPClient.BufferSize := 8192; 
    UDPClient.Active := True; 
    while True do //put your condition here 
    begin 
     //some code 
     //When you need to update the screen you should syncronize 
     TThread.Synchronize(TThread.CurrentThread, procedure 
     begin 
     form1.Memo1.Text := 'update'; 
     end); 
    end; 
    UDPClient.DisposeOf; 
    end); 
+0

danke. Wenn ich möchte, dass der zurückgegebene Wert in einem TMemo angezeigt wird, kann ich auf Task.run zugreifen. Ich weiß technisch, dass Prozeduren keine Werte zurückgeben, aber ich kann trotzdem die Ausgabe erfassen. Ich weiß in C oder auch Perl kann ich. –

+0

Aktualisieren Sie einfach das, was Sie innerhalb 'TThread.Synchronize' benötigen, Sie können ein Memo in einem Formular 'form1.memo.text: =' update' 'aktualisieren oder eine Prozedur auf einem Datenmodul' datamodule1.update() ', etc. Aufrufen ... – Kohull

Verwandte Themen