欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Delphi断线重连线程

发布时间:2023/12/14 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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断线重连线程的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。