Delphi断线重连线程
生活随笔
收集整理的这篇文章主要介绍了
Delphi断线重连线程
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
作为tcp客户端,使用TIdTcpClient控件,在与后台服务的交互时,如果出现网络异常,或者后台服务重启,会导致无法保存数据或查询后台数据,这种情况下可以开启断线重连线程,自动连接上后台服务
unit threadReconnectServer;interfaceusesClasses, SysUtils, ScktComp, windows, ComCtrls, forms, activex, StdCtrls, strutils, IdTCPClient, Global;typeTReconnectServerThread = class(TThread)privateclient: TIdTCPClient;protectedprocedure Execute; override;publicconstructor Create(IdTCPClient1: TIdTCPClient);destructor Destroy; override;end;implementationconstructor TReconnectServerThread.Create(IdTCPClient1: TIdTCPClient); begininherited Create(True);client := IdTCPClient1;FreeOnTerminate := False; end;destructor TReconnectServerThread.Destroy; begininherited destroy; end;procedure TReconnectServerThread.Execute; beginwhile not Terminated dobeginSleep(5000);tryclient.Disconnect;client.Connect;gOnlineSuccess := True;Suspend;excepton e: Exception dobegingOnlineSuccess := False;end;end;end; end;end.在主窗体create中创建线程对象,创建成功后,并不会执行线程,在需要的时候,唤醒线程即可
// 声明 ReconnectServerThread: TReconnectServerThread;// 在create中 // 断线重连线程 ReconnectServerThread := TReconnectServerThread.Create(IdTCPClient1); function TfrmMain.SendMsgToServer(msg: string): Boolean;procedure ReconnectServer;begingOnlineSuccess := False;// 启动重连线程ReconnectServerThread.Resume;end;beginResult := false;tryif gOnlineSuccess and IdTCPClient1.Connected thenbegin// 末尾加上分割符,保证数据传输到服务器后,能正确按Json解析IdTCPClient1.IOHandler.Write(msg + '&&', IndyTextEncoding(TEncoding.UTF8));Result := true;endelsebeginReconnectServer;end;excepton e: Exception dobeginReconnectServer;end;end; end;总结
以上是生活随笔为你收集整理的Delphi断线重连线程的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 串口掉线自动重连
- 下一篇: [CVPR2018](SMALR)Lio