Delphi断线重连线程

作为tcp客户端,使用TIdTcpClient控件,在与后台服务的交互时,如果出现网络异常,或者后台服务重启,会导致无法保存数据或查询后台数据,这种情况下可以开启断线重连线程,自动连接上后台服务

unit threadReconnectServer;

interface

uses
  Classes, SysUtils, ScktComp, windows, ComCtrls, forms, activex, StdCtrls, strutils, IdTCPClient, Global;

type
  TReconnectServerThread = class(TThread)
  private
    client: TIdTCPClient;
  protected
    procedure Execute; override;
  public
    constructor Create(IdTCPClient1: TIdTCPClient);
    destructor Destroy; override;
  end;

implementation

constructor TReconnectServerThread.Create(IdTCPClient1: TIdTCPClient);
begin
  inherited Create(True);
  client := IdTCPClient1;

  FreeOnTerminate := False;
end;

destructor TReconnectServerThread.Destroy;
begin

  inherited destroy;
end;

procedure TReconnectServerThread.Execute;
begin
  while not Terminated do
  begin
    Sleep(5000);

    try
      client.Disconnect;
      client.Connect;
      gOnlineSuccess := True;

      Suspend;
    except
      on e: Exception do
      begin
        gOnlineSuccess := False;
      end;
    end;
  end;
end;

end.

在主窗体create中创建线程对象,创建成功后,并不会执行线程,在需要的时候,唤醒线程即可

// 声明
ReconnectServerThread: TReconnectServerThread;

// 在create中
// 断线重连线程
ReconnectServerThread := TReconnectServerThread.Create(IdTCPClient1);
function TfrmMain.SendMsgToServer(msg: string): Boolean;

  procedure ReconnectServer;
  begin
    gOnlineSuccess := False;
    // 启动重连线程
    ReconnectServerThread.Resume;
  end;

begin
  Result := false;
  try
    if gOnlineSuccess and IdTCPClient1.Connected then
    begin
      // 末尾加上分割符,保证数据传输到服务器后,能正确按Json解析
      IdTCPClient1.IOHandler.Write(msg + '&&', IndyTextEncoding(TEncoding.UTF8));
      Result := true;
    end
    else
    begin
      ReconnectServer;
    end;
  except
    on e: Exception do
    begin
      ReconnectServer;
    end;

  end;
end;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值