2017-04-26 83 views
0

本週早些時候,我得到了一個Delphi UDPClient的工作(在幫助下)。現在我需要在一個單獨的單元和它自己的線程中運行客戶端過程。有沒有一個簡單的例子,或至少有人可以分享的僞代碼?我是爲了避免在線程中使用TForm,因爲我將從線程獲取返回的數據並顯示到TMemo字段中。我有完全定義我的類型IdUPDClient的具體問題..UDPClient在單獨的線程中Delphi

回答

1

您可以使用一個TTask運行一些單獨的線程中的代碼,添加到使用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

謝謝。如果我想要返回值顯示在TMemo中,我如何訪問Task.run返回。我知道技術上的程序不會返回值,但是我仍然可以捕獲輸出。我知道在C或甚至Perl我可以。 –

+0

只需更新'TThread.Synchronize'內需要的內容,就可以更新Form1.memo.text:='update''形式內的備忘錄或調用datamodule'datamodule1.update()'等的過程... – Kohull