【问题标题】:UDPClient in separate thread DelphiUDPClient 在单独的线程 Delphi
【发布时间】:2017-04-26 16:54:18
【问题描述】:

本周早些时候,我能够让 Delphi UDPClient 工作(在帮助下)。现在我需要在一个单独的单元和它自己的线程中运行客户端程序。是否有一个简单的例子或至少有人可以分享伪代码?我要避免在线程中使用 TForm,因为我将从线程中获取返回的数据并显示到 TMemo 字段中。我在完全定义我的 IdUPDClient 类型时遇到了具体问题。

【问题讨论】:

    标签: multithreading delphi udpclient


    【解决方案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);
    

    【讨论】:

    • 谢谢。如果我希望返回的值显示在 TMemo 中,我如何访问 Task.run 返回。我知道技术上程序不返回值,但我仍然可以捕获输出。我知道 C 甚至 Perl 都可以。
    • 只需在TThread.Synchronize 中更新您需要的内容,您可以在form1.memo.text := 'update' 表单中更新备忘录或在数据模块datamodule1.update() 上调用过程等等...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多