精易论坛
标题:
HP-Socket TCP 客户Duan问题
[打印本页]
作者:
最烦起名字
时间:
2025-3-6 01:11
标题:
HP-Socket TCP 客户Duan问题
靠HP-Socket写了一个TCP客户Duan
在接收方法中,处理接收数据过程比较复杂,表现出了客户Duan层面的接收数据顺序错乱.
我需要在保证接收数据顺序的情况下,尽可能小的影响处理接收数据的效率.后面还会建立多个连接处理同样的情况.
希望得到大家的帮助.兄弟们给点建议和思路吧
作者:
算法艺术家
时间:
2025-3-6 01:28
放队列里 一个一个弹出 然后处理
作者:
最烦起名字
时间:
2025-3-6 01:30
算法艺术家 发表于 2025-3-6 01:28
放队列里 一个一个弹出 然后处理
任务队列吗?不会用捏
大佬,有例子吗?
作者:
算法艺术家
时间:
2025-3-6 01:32
最烦起名字 发表于 2025-3-6 01:30
任务队列吗?不会用捏大佬,有例子吗?
精益里就有,相当于把参数都存进去,然后按顺序一个一个拿出来处理,稍微麻烦点 。你试试给整个接收函数头尾都加上许可 看看还乱不乱
补充内容 (2025-3-6 01:34):
精益模块里就有队列
作者:
cckj
时间:
2025-3-6 08:45
// 1. 初始化HP-Socket客户Duan(TCP_PACK模式)
客户Duan对象 = HP_TCPClient_PACK类.创建()
客户Duan对象.置数据到达事件(&数据到达回调)
// 2. 线程安全队列和临界区
全局变量 接收队列 = 队列类.创建()
全局变量 队列锁 = 临界区类.创建()
// 3. 数据到达回调函数(非主线程)
函数 数据到达回调(连接ID, 数据指针, 数据长度)
临界区.进入(队列锁)
接收队列.压入(连接ID, 数据指针, 数据长度)
临界区.离开(队列锁)
启动线程(&处理线程, )
// 4. 处理线程(单线程顺序执行)
函数 处理线程()
临界区.进入(队列锁)
如果真 (接收队列.是否为空() = 假)
连接ID, 数据指针, 数据长度 = 接收队列.弹出()
处理数据(连接ID, 数据指针, 数据长度)
临界区.离开(队列锁)
欢迎光临 精易论坛 (https://125.confly.eu.org/)
Powered by Discuz! X3.4