请教关于串口通讯和网络通讯整合方案的问题..

ManOfBCB 2006-08-31 11:27:32
我现在有个系统:需要同时兼容串口通讯和网络通讯,串口通讯最多接60个以下的串口,一般也就
10个左右的串口,网络通讯最多接100个左右的通讯口,一般也是大约10个左右,只是有时作为服务器
端,有时作为客户端,数据量每个包最大20k,一般在5k左右(串口通讯分包传输,每个包1k),每天
接收的数据最大10万条纪录,一般大约1万条纪录。我的问题是:
1、用多线程通讯是否性能高些?大家一般遇到这种情况选择什么样的通讯模式?
2、用多线程通讯,串口用同步好呢?还是异步好呢?用重叠io还是其他方式?网络通讯用阻塞还
是非阻塞?
3、用多线程通讯,网络通讯服务器端是否每个通讯口都产生一个通讯线程,之外还有一个监听线
程?

谢谢大家,参与有分。
...全文
436 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ManOfBCB 2006-09-17
  • 打赏
  • 举报
回复
在线程中消息发到哪儿呢?是否发到主线程中,在主线程中读取数据呢?
LuoGD 2006-09-16
  • 打赏
  • 举报
回复
1、用多线程通讯是否性能高些?大家一般遇到这种情况选择什么样的通讯模式?
RE:一定要用多线程,并且建议用线程池+Socket连接池的双池模式,
2、用多线程通讯,串口用同步好呢?还是异步好呢?用重叠io还是其他方式?网络通讯用阻塞还是非阻塞?
RE: 采用重叠io 和 非阻塞方式
3、用多线程通讯,网络通讯服务器端是否每个通讯口都产生一个通讯线程,之外还有一个监听线程?
RE:如1所答

ManOfBCB 2006-09-15
  • 打赏
  • 举报
回复
请问:
1、串口用线程还是用异步非阻塞方式吗?
2、在线程中消息发到哪儿呢?是否发到主线程中,在主线程中读取数据呢?
dronly 2006-09-12
  • 打赏
  • 举报
回复
定时器实际上也不好控制的啊

他的过程是挂在主线程中的,不可以随便的就让他阻塞

但线程可以,而且启动一线程的要的价值比较便宜,但就是调试跟踪比较麻烦

而且要注意很多死锁跟资源共享的情况

加以LZ用API写,但这样的化必须要熟悉线程方面的东西

所谓磨刀不误坎材功,个人感觉是有价值的
ManOfBCB 2006-09-09
  • 打赏
  • 举报
回复
主要是用定时器好控制些,而且我是用消息通知的,并没用线程,如果单独弄
个发送线程,感觉有点麻烦!
dronly 2006-09-09
  • 打赏
  • 举报
回复
个人感觉定时器用得不好

因为它跑的是主线程的过程,这样跟界面的操作太紧密的话,比较容易出现界面的假死状态
ManOfBCB 2006-09-05
  • 打赏
  • 举报
回复
我现在的类结构是这样的:设备类-〉串口通讯类(一个线程监控串口发消息通知系统
读去数据,用的是异步重叠模式),可以继承不同的串口通讯类
-〉网络通讯类(封装客户端和服务器端2个控件,
用的是ctNonBlocking,没用线程,用消息通知读取数据)

发送是在定时器中控制的,我把设备类用vector串起来,好控制,不知这样如何?
dronly 2006-09-03
  • 打赏
  • 举报
回复
第一:
LZ的情况是非用SDK不可的,继承原来的控件不好做,受限制太多,就一个主线程的依附就要命了

第二:
我觉得不应该把网络数据跟串口数据分开得太严格,个人感觉可以一视同仁的

第三:
个人认为多线程是必须的,起码操作系统在做这方面的时候是多线程的,你不多线程是浪费了操作系统的这个属性了

第四:
个人感觉应该把网络动作跟串口的动作都消息化,做成一个核心队列,让多个线程去读队列并处理消息,用switch()来分别队列里面的消息,让线程处于对资源的合理的抢占处理

第五:
监听线程看你的程序的结构,如果需要的话是个不错的想法,但个人感觉这样会把结构搞得更复杂,本来多线的程序就难控制,再来个功能跟动作完全不一样的线程,也是要同步的话,死锁的机会很大.
ManOfBCB 2006-09-03
  • 打赏
  • 举报
回复
up
netliuming 2006-09-01
  • 打赏
  • 举报
回复
顶fjye(老姜) 的,有一个监听线程好些。
ManOfBCB 2006-09-01
  • 打赏
  • 举报
回复
串口我用异步重叠IO方式,网络通讯是基于TCP/IP的,网络该用那种模式呢?
Waiting4you 2006-08-31
  • 打赏
  • 举报
回复
用多线程,网络通讯使用阻塞方式,用Indy就行

串口在winxp/win2k下面在网上见到说只能用异步重叠IO方式,不知道是不是,偶用spcomm
fjye 2006-08-31
  • 打赏
  • 举报
回复
串口用的消息触发方式,就是收数据侧用触发,存到缓存,到一定程度再触发处理流程

网络通讯用多线程方式,不需要每个端口一个线程,之需要线程对缓冲区都能访问就可以
wanglovec 2006-08-31
  • 打赏
  • 举报
回复
帮顶 偶以为 多线程主要用在对时效要求较高的场合 听听楼下的意见

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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