看了些例子,好像是在客户端用Timer定时轮训,检测TcpClient.ReadLn是否为空
我得Timer,interval设为500,可是接收不到指令,而且程序非常慢
应该开个线程来轮训吗?
有没有代码?

解决方案 »

  1.   

    大概像这样,至于线程怎么写,自己找找资料吧type
      TThr=class(TThread)
      protected
        procedure Execute;override;
      end;procedure TThr.Execute;
    begin
     try
     while not Terminated do
     begin
       if not Form1.IdTcpClient1.Connected then
          Terminate
       else begin
         try
         Form1.IdTcpClient1.ReadBuffer(...);  {读数据}
         {用同步处理数据Synchronize}
         except
           {读数据异常处理}
         end;
       end;
     end;
     except
     end;
    end;
      

  2.   

    type
      TRecvThread = class(TThread)
      private
        FOnMethod: TThreadMethod;
        procedure DoMethod;
      protected
        procedure Execute; override;
      public
        property OnMethod: TThreadMethod read FOnMethod write FOnMethod;
      end;  procedure DoMethod;
      begin
        if Assigned(FOnMethod) then
          FOnMethod;
      end;  procedure TRecvThread.Execute;
      begin
        while not Terminated do
        begin
          try
            DoMethod();
          except
            sleep(1);
            continue;
          end;
        end;
      end;// 写个TThreadMethod方法给TRecvThread的对象就可以了。
    var
      RecvThread: TRecvThread;  RecvThread := TRecvThread.Create(True);
      RecvThread.OnMethod := MyThreadMethod;
      RecvThread.Resume;(Start)
      

  3.   

    网上找了一段线程代码
    在线程中不断检测是否收到指令,如果收到则写入一个全局的StringList,
    在主程序中用一个Timer来检测StringList里面是否有值