请问如何在程序退出时断开IdTCPServer所有还在连接的线程?

zhouweiyong123 2007-12-16 06:25:51
如题,我在程序退出的时候总是产生异常。请大家指点。
...全文
444 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
超龄编码人 2007-12-19
  • 打赏
  • 举报
回复
将所有连接保存在一个 TThreadList里面,程序关闭是 断开
超龄编码人 2007-12-18
  • 打赏
  • 举报
回复
最好让自己推出
yuehaiyang 2007-12-17
  • 打赏
  • 举报
回复
如果客户端也是自己做的话,可以发退出命令给客户端,让他们自己退出。
CYDong0423 2007-12-17
  • 打赏
  • 举报
回复
IdTcpServer还存在的问题客户非正常关闭连接无法断开解决

WinSock1方法
可以考虑用TCP自己的保活定时器,他的作用是每隔一段时间检查一下连接是否正常,如果不正常则报告给应用层。
用下面的方法试试,理论上应该是对的,偶没有实际测试:

uses WinSock;

在TCPServer的OnConnection事件里加上如下的片段:
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
type
TCP_KeepAlive = record
OnOff: Cardinal;
KeepAliveTime: Cardinal;
KeepAliveInterval: Cardinal
end;
var
Val: TCP_KeepAlive;
Arg: Integer;
begin
Val.OnOff:=1;
Val.KeepAliveTime:=xxx;
Val.KeepAliveInterval:=xxx;
Arg:=Integer(@Val);
ioctlsocket(AThread.Connection.Socket.Binding.Handle,
$80000000 or $18000000 or 4, Arg);
end;

TCP_KeepAlive里的参数的意义是显而易见的,就不多说了。
然后连接将自动按指定间隔测试是否正常,作为应用程序可以在TCPServer的OnException里守着就行了。
WinSock2方法
uses WinSock2;

procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
type
TCP_KeepAlive = record
OnOff: Cardinal;
KeepAliveTime: Cardinal;
KeepAliveInterval: Cardinal
end;
var
Val: TCP_KeepAlive;
Ret: DWord;
begin
Val.OnOff:=1;
Val.KeepAliveTime:=xxx;
Val.KeepAliveInterval:=xxx;
WSAIoctl(AThread.Connection.Socket.Binding.Handle, IOC_IN or IOC_VENDOR or 4,
@Val, SizeOf(Val), nil, 0, @Ret, nil, nil)
end;
CYDong0423 2007-12-17
  • 打赏
  • 举报
回复

退出IdTcpServer异常解决

要这样结束
try
with TCPServer.Threads.LockList do
begin
for i := 0 to Count- 1 do
begin
try
Athread := Items[i];
Athread.Terminate;
Athread.Connection.Disconnect;
except
end;
end;
end;

finally
TCPServer.Threads.UnlockList;
TCPServer.Active := false;
end;
一、项目简介 本项目(HF24075 SDFeatureRivertraining)是一套以多路 PWM 多彩 LED 灯光控制为核心的固件方案,基于 PADAUK PMS 系列单片机。方案对蓝、青、粉等多色 LED 进行独立 PWM 调光,实现呼吸、渐变、流水等细腻灯光效果,并支持按键切换与传感器交互。其 PWM 调光结构清晰,是学习单片机 PWM、色彩混合与灯光算法的理想范例。 核心应用场景: 1. 氛围灯 / 流水灯产品开发 2. PWM 调光与色彩混合学习 3. 电子类课程设计 / 毕业设计 4. 灯光艺术与 DIY 项目 适配使用场景:学习练手、毕业设计、课程设计、创业售卖、实操实训,突出实用性与可落地性。 二、硬件核心配置 · 主控芯片:PADAUK(应广科技)PMS 系列 8 位 OTP 单片机 · 外接外设: - 多色 LED 灯组(蓝 / 青 / 粉等多路独立 PWM) - 轻触按键(模式切换) - 传感器(交互触发) · 操控设备: - 机身实体按键操控 三、核心功能介绍 1. 多路独立 PWM 调光:蓝、青、粉等 LED 各自独立占空比控制,实现精准亮度; 2. 呼吸 / 渐变 / 流水效果:通过 PWM 变化曲线营造丰富灯光律动; 3. 按键切换模式:轻触在多种灯效间循环切换; 4. 传感器交互:外部传感信号触发或联动灯光变化; 5. 低功耗设计:闲置进入低功耗,按需唤醒。 6. 参数可配:亮灭周期、渐变速度等可调,便于定制。 四、项目优势与亮点 · 灯光细腻:多路独立 PWM,效果远胜简单开关灯。 · 算法清晰:呼吸 / 渐变实现简洁,易于理解与移植。 · 扩展性强:可轻松增加颜色与模式,适配各类灯饰。 ·

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧