2 wangyunwu111 wangyunwu111 于 2015.07.23 10:06 提问

求助一个MFC多线程串口通信的问题!!!!

功能简述:通信采用的是modbus协议,该软件是作为从机,即主机给我的软件发送请求命令,我解析命令后,将要请求的数据发给主机。

我的策略:采用一个接收线程和一个发送线程,当接收线程接收到数据后发消息给主线程,主线程在消息响应函数中将接收线程的数据流进行了解析,每次会解析出好多条命令,然后根据每一天命令我开始组织要回复的数据,组织好一条数据后SetEvent,通知发送线程进行发送。

困惑的问题:
1.我的策略是否有问题?
2.我的容器里有好多条主机请求命令,循环取出一条命令后组织回复数据,然后组织好一条数据后SetEvent,通知发送线程进行发送,那如果主线程的时间片没有到,发送线程就不会被调用,那么就会进入下一个循环取命令然后组织回复数据,这个时候就会把上一条要回复的数据给覆盖掉了,怎么办?到底该是一个什么样的处理流程呢?新人困惑求高手解答
3.我没有c币了,不好意思

4个回答

q760077537
q760077537   2015.07.23 11:02
已采纳

没必要这么多线程吧,COM口的通讯速率和CPU处理速率是没法比的,直接一个进程接收然后处理发送。
数据量实在是太大的话就这样处理,开启一条垃圾处理线程,用来处理已经结束线程的资源,接收线程接收到的数据new一块内存保存,
然后在接收进程里面执行 beginthreadex开启一条线程,线程参数是
new的那块地址,线程执行完后记得delete就可以了,记得把线程句柄保存交给垃圾处理线程。

q760077537
q760077537 回复wangyunwu111: 是的
2 年多之前 回复
wangyunwu111
wangyunwu111 谢谢你的回答,你的意思是我直接在接收线程里解析直接发送,还是在主线程里解析并发送
2 年多之前 回复
wangyunwu111
wangyunwu111   2015.07.23 13:29

谢谢你的回答,你的意思是我直接在接收线程里解析直接发送,还是在主线程里解析并发送

oyljerry
oyljerry   Ds   Rxr 2015.07.23 14:41

你用队列,把解析出来的命令放到队列里面,然后发送线程就去队列里取命令一条条发送,发送了的就删除,然后就是多个线程对这个队列加一个读写锁

sina_2831808769
sina_2831808769   Rxr 2015.07.25 13:48

没必要这么多线程吧,COM口的通讯速率和CPU处理速率是没法比的,直接一个进程接收然后处理发送。
数据量实在是太大的话就这样处理,开启一条垃圾处理线程,用来处理已经结束线程的资源,接收线程接收到的数据new一块内存保存,
然后在接收进程里面执行 beginthreadex开启一条线程,线程参数是
new的那块地址,线程执行完后记得delete就可以了,记得把线程句柄保存交给垃圾处理线程。

Csdn user default icon
上传中...
上传图片
插入图片