首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

非阻塞单线程的通讯程序能改为多线程的吗?解决方案

2012-02-12 
非阻塞单线程的通讯程序能改为多线程的吗?我有一个dll,里面有一个导出类,处理所有的网络通讯问题,然后通过

非阻塞单线程的通讯程序能改为多线程的吗?
我有一个dll,里面有一个导出类,处理所有的网络通讯问题,然后通过事件把接收到的没有错误的数据传给主程序,大概的逻辑程序是这样的
onread

读取数据包
验证数据包
把没有错误的数据包通过事件发送给主程序

--------------
这个是单线程的非阻塞实现的,现在有一个问题:当onread中处理很频繁的时候,主程序的相应非常不好,并且还有接受缓冲区满的情况,那么我可以不可以改造以下这样的:
onread:
读取数据包
验证数据包
把没有错误的数据包发送给一个队列

新开一个线程thread:
读取队列中的数据
把没有错误的数据包通过事件发送给主程序


------------------
这样程序就变成了多线程的,请问这样能达到我要的效果吗?




[解决办法]
可以缓解主程序的响应情况。
但收包太快时,队列会满,这时要考虑丢包策略,或者改变传输速度。
[解决办法]
主线程之负责接收和记录当前状态,那剩下的事情都交给子线程来做就可以缓解主线程的压力了。

热点排行