WINSOCK控件的控件数组SOCKET(),动态加载后,当关闭程序时,要unload这些控件,如何先判断这个SOCKER(i)有没有加载再UNLOAD它

我思故我在2014 2017-02-22 02:08:59
WINSOCK控件的控件数组SOCKET(),动态加载后,当关闭程序时,要unload这些控件,如何先判断这个SOCKER(i)有没有加载再UNLOAD它,以免造成异常,造成程序没法正常运行。
...全文
522 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-02-23
  • 打赏
  • 举报
回复
引用 6 楼 u013776187 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] socket(0)静态加载 socket(1..maxConn)动态加载 即可。
非常感谢,我现在的问题是,这动态加载后的SOCKET控件,也是动态的卸载,比如某个SOCKET控件半小时内无流量,那就卸载掉它,但是当有新的CONNECTREQUEST连接请求时,可以动态的加载已经卸载掉的那个SOCKET控件,问题是我需要先判断一下这个SOCKET控件是没有加载的状态还是CLOSE连接的状态,如果已经卸载了,我不知道,而直接调用这个SOCKET控件的ACCEPT方法,那会产生异常。所以要先判断一下这个SOCKET控件有没有加载,现在的问题就是怎么判断一个未加载的控件 的存在状态。 [/quote] 这种问题,我的做法是,用一个变量(一般是“模块级变量”,或者全局变量),记录加载的“上界值”。 0号控件是设计时画上去的,因此也就不能用代码 Unload() ;程序退出时只管“for ... 1 to 上界值”执行Unload就行。 同时,在程序中肯定有一个“表”(实际就是一个数组)来记录各个控件的状态,   用一个变量记录“已加载”中的“可用对象数量”。 在“需要”时,如果“可用数量”为0,把“上界值”+1,新加载一个;   否则,从“表”中按状态标识值找到一个“可用”的来使用,同是把“可用数量”值-1 。 而在“已加载对象”使用完毕(比如你的WinSocket控件,加载后,建立连接进行通讯,最后断开连接了),   就要注意更新“表”中对应索引号的状态标识,并把“可用数量”的值+1 。 当然你也可以不用记录“可用数量”,每次先搜索“表”,找得到就直接用,找不到就新加载一个。 这个“核心思想”,是动态加载的对象,在“使用结束后”不是立即卸载,而是用一个表标识它的状态为可用;   在程序结束时,进行“一次性卸载”;并且卸载前,可按“表”的状态标识值,判断是否调用该对象有“结束通知”。
of123 2017-02-23
  • 打赏
  • 举报
回复
最常用的,就是数组记录当前状态。加载和卸载都查询并维护数组记录。
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
socket(0)静态加载 socket(1..maxConn)动态加载 即可。
非常感谢,我现在的问题是,这动态加载后的SOCKET控件,也是动态的卸载,比如某个SOCKET控件半小时内无流量,那就卸载掉它,但是当有新的CONNECTREQUEST连接请求时,可以动态的加载已经卸载掉的那个SOCKET控件,问题是我需要先判断一下这个SOCKET控件是没有加载的状态还是CLOSE连接的状态,如果已经卸载了,我不知道,而直接调用这个SOCKET控件的ACCEPT方法,那会产生异常。所以要先判断一下这个SOCKET控件有没有加载,现在的问题就是怎么判断一个未加载的控件 的存在状态。
XBoy410 2017-02-22
  • 打赏
  • 举报
回复


目前,我限定登陆用户3人,理论上可以更多。
XBoy410 2017-02-22
  • 打赏
  • 举报
回复
我采用的是:先声明数组Arr(index)跟随,记录WinSock(index)开启状态,当卸载WinSock(index)时,循环语句检查Arr(index)的值不为空,即可卸载WinSock(index),注意index,这个值很重要,同时也要注意,当卸载WinSock(index)时,也要清空对应Arr(index)的值,这样就不需要用到On Error Resume 语句。 目前程序在用,没有出现不稳定的情况。
XBoy410 2017-02-22
  • 打赏
  • 举报
回复
我采用的是:先声明数组Arr(index)跟随,记录WinSock(index)开启状态,当卸载WinSock(index)时,循环语句检查Arr(index)的值不为空,即可卸载WinSock(index),注意index,这个值很重要。这样就不需要用到On Error Resume 语句。 目前程序在用,没有出现不稳定的情况。
Tiger_Zhao 2017-02-22
  • 打赏
  • 举报
回复
A)你可以自己建个数组把各个WinSock的Load/Unload状态记下来用于判断。
B)在整个循环卸载前加个 On Error Resume 语句,忽略错误即可。
C)其实窗体关闭时上面的控件会自动卸载,无需显式卸载。
赵4老师 2017-02-22
  • 打赏
  • 举报
回复
socket(0)静态加载 socket(1..maxConn)动态加载 即可。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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