MFC串口通信的问题(百思不得其解,求大神指点)

chensi0903 2014-07-27 09:13:15
1、应公司要求编写了一个基于MFC单文档的上位机程序,与单片机建立通讯,通讯方式为235,半双工,所以没有写握手协议。
2、通讯的函数写在DLL里面,没有采用多线程的方法。
3、在MFC单文档的上位机程序视类中的ontime函数里建立线程(每100ms建立一次线程,读取数据),在框架类里对dll采用显性调用,然后再线程里获取框架指针调用dll的函数对串口进行读写。(在线程里只可以使用框架类的指针)
4、线程里读取数据后发送消息给视类,实现各个控件显示读取的数据值。
5、编译没有问题,运行后也正常。
6、问题来了,当我不停的放大缩小窗口时(或者小窗口时我鼠标移动窗口的位置),大概6、7次会出现一次通讯中断的情况!!!这是为什么,想了好久也没找到原因出在哪??
7、如果我不在程序视类中的ontime函数里建立线程,只采用单线程的方法,则不会出现上述问题。
我真是给跪了!@!!!,恳请大家帮我想想,问题出在哪
...全文
178 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
23妍 2014-08-12
  • 打赏
  • 举报
回复
换方法吧,串口通信有那么麻烦吗?cserialport加上ok
Eleven 2014-08-12
  • 打赏
  • 举报
回复
WM_TIMER消息的优先级比较低,只有当消息队列中没有其它高优先级的消息的时候,才会去处理它。 The WM_TIMER message is a low-priority message. The GetMessage and PeekMessage functions post this message only when no other higher-priority messages are in the thread's message queue.
阿源是少年 2014-08-12
  • 打赏
  • 举报
回复
搞不懂为什么要每个100ms建立一个线程,一个线程不就完事了吗,你这样不停的开线程,串口会不停的打开关闭,打开关闭,效率很低,而且你考虑过线程同步问题吗,如果一个线程正在read,你的另一个线程closehandle了,问题就来了
lionghua 2014-08-12
  • 打赏
  • 举报
回复
为何把线程建立写到视图类中呢,你不停的调节窗口大小,视图需要刷新,可能刷新的间隔小,影响了线程的创建。 1,建议你做个试验,调整窗口的时间间隔长一点,我觉得应该不会中断。 2,线程的创建写到doc中。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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