2017-04-26 7 views
0

今週、私はDelphi UDPClientを(ヘルプで)動作させることができました。今では、別のユニットと独自のスレッドでクライアント・プロシージャを実行する必要があります。簡単な例があるか、少なくとも擬似コードを誰かが共有できるのでしょうか?スレッドから返されたデータを取得してTMemoフィールドに表示するので、スレッドでTFormを使用しないようにしました。私は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

関連する問題