开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2215|回复: 5
收起左侧

[易语言] 多用户多线程退出问题

[复制链接]
结帖率:0% (0/4)
发表于 2011-7-11 04:14:47 | 显示全部楼层 |阅读模式   江西省新余市
2精币
本帖最后由 免费网管 于 2011-7-11 04:15 编辑

下面是软件的多用户部分,软件编译运行后,10个以下用户连接上来,每半小时左右就会退出一次,要是超过10个用户连接,软件几分钟就会退一次,请大家帮我看看哪里写错了。
.版本 2
.支持库 EThread
.支持库 sock
.支持库 spec
.支持库 mysql
.程序集 多用户控制权
.子程序 多用户控制
.局部变量 监听控制, 整数型
.局部变量 新用户句柄, 整数型
.局部变量 用户进入锁, 整数型
监听控制 = 1
用户进入锁 = 创建进入许可证 ()
.如果 (服务器.启动 (到整数 (读配置项 (取运行目录 () + “\my.INI”, “my”, “my”, ))))
    .判断循环首 (监听控制 = 1)
        新用户句柄 = 服务器.监听 (0)
        进入许可区 (用户进入锁)
        启动线程 (&单一接收线程, 新用户句柄, )
        退出许可区 (用户进入锁)
        延迟 (50)
    .判断循环尾 ()
.否则

.如果结束

.子程序 单一接收线程
.参数 新用户句柄, 整数型
.局部变量 退出标志, 整数型
.局部变量 用户信息, 用户信息
.局部变量 数据, 字节集
.局部变量 句柄, 整数型
.局部变量 记录集句柄, 整数型
.局部变量 用户进入锁, 整数型
' 用户进入锁 = 创建进入许可证 ()
' 进入许可区 (用户进入锁)
退出标志 = 1
用户信息 = 用户身份验证 (新用户句柄)
执行SQL语句 (句柄, “select * from IPBlackList where IP地址='” + 用户信息.用户IP + “'”)
记录集句柄 = 取记录集 (句柄)
.如果真 (记录集句柄 = 0)
    .判断循环首 (退出标志 = 1)
        数据 = 服务器.接收 (新用户句柄, 0, )
        .如果 (取字节集长度 (数据) ≤ 0)
            删除用户 (用户信息)
            退出标志 = 0
            跳出循环 ()
        .否则
            收到客户端数据 (用户信息, 数据)
        .如果结束
    .判断循环尾 ()
    ' 退出许可区 (用户进入锁)
.如果真结束

.子程序 服务器节点回应
.判断开始 (数据报.配置 (到整数 (读配置项 (取运行目录 () + “\my.INI”, “my”, “my”, ))))
    启动线程 (&接收子程序, , )
.默认
    延时 (5000)
    结束 ()

.判断结束

.子程序 接收子程序
.局部变量 对方信息, 对方信息
.局部变量 数据, 字节集
.局部变量 xkz
xkz = 创建进入许可证 ()
进入许可区 (xkz)
数据 = 数据报.接收 (0, 对方信息, )
.如果真 (到文本 (数据) ≠ “”)  ' 代表收到新的消息
    数据报_数据到达 (对方信息, 数据)
    退出许可区 (xkz)
.如果真结束
接收子程序 ()
.子程序 数据报_数据到达
.参数 对方信息, 对方信息
.参数 数据, 字节集
.局部变量 ID, 字节集
.局部变量 数据长度, 整数型
.如果真 (取字节集左边 (数据, 18) = { 18, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 20, 0, 0, 0, 20 })
    数据报.发送 (对方信息, 数据, 0)
.如果真结束

.子程序 在线信息发送器
.局部变量 新用户句柄, 整数型
.局部变量 监听控制, 整数型
.如果 (在线信息服务.启动 (83617))
    监听控制 = 1
    .判断循环首 (监听控制 = 1)
        新用户句柄 = 在线信息服务.监听 (0)
        启动线程 (&单一接收线程X, 新用户句柄, )
    .判断循环尾 ()
.否则
.如果结束

.子程序 单一接收线程X
.参数 新用户句柄, 整数型
.局部变量 退出标志, 整数型
.局部变量 数据, 字节集
.局部变量 xkz, 整数型
退出标志 = 1
xkz = 创建进入许可证 ()
进入许可区 (xkz)
.判断循环首 (退出标志 = 1)
    数据 = 在线信息服务.接收 (新用户句柄, 0, )
    .如果 (取字节集长度 (数据) ≤ 0)
        退出标志 = 0
    .否则
        .如果真 (到文本 (数据) = “客户端连接信息”)
            在线信息服务.发送 (新用户句柄, “88888”, 0)
        .如果真结束
    .如果结束
.判断循环尾 ()
退出许可区 (xkz)


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:75% (6/8)
发表于 2011-7-11 08:00:56 | 显示全部楼层   河南省南阳市
表示很菜。。。
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 17 天

发表于 2011-7-11 08:28:40 | 显示全部楼层   江苏省苏州市
在多线程子程序开始的时候加入命令“线程_初始化COM库”,线程结束是加入命令“线程_取消COM库”,该命令是精易模块中的,你加入后试试
回复

使用道具 举报

结帖率:0% (0/4)
 楼主| 发表于 2011-7-12 03:25:20 | 显示全部楼层   江西省新余市
楼上的大哥 我上面的代码
线程_初始化COM库 要放在哪个位置

“线程_取消COM库又要放在哪个位置
回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 17 天

发表于 2011-7-12 08:04:41 | 显示全部楼层   江苏省苏州市
免费网管 发表于 2011-7-12 03:25
楼上的大哥 我上面的代码
线程_初始化COM库 要放在哪个位置

写在“单一接收线程”子程序开始时和这个子程序结束时,这个命令只对程序正确,但引用多线程后自动退出这一类的问题比较有效,如果是程序本身错误造成的问题,那没有任何意义,所以你还得确认一下程序是否还有其他问题
回复

使用道具 举报

结帖率:0% (0/4)
 楼主| 发表于 2011-7-19 18:52:08 | 显示全部楼层   江西省新余市
线程_初始化COM库
之后一运行 只要有用户上来验证就报该内存不能为read
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表