用MFC做个串口通信的软件,出现很奇怪的错误,成员变量在一个函数改变后,跳出该函数后成员变量的值却没变

2024-12-28 15:13:38
推荐回答(4个)
回答1:

这个函数
OnMscommCa() 是串口有数据的时候的消息响应,那么就是主线程必须处在消息循环不停滞的情况下才能响应这个函数,你Sleep(300);//等待200ms 这不是让主线程消息循环暂停了吗?
那Sleep过了,主线程才读取消息队列的消息进行处理,所以你立即MessageBox(m_strCARXData); 是在数据未被读取时进行的,而等你弹出消息框,主线程消息循环是继续的,这时OnMscommCa() 读取数据完毕,所以你第二次弹出的时候就成了。

回答2:

其实就是接收延时的问题,看你的代码,定时发送一次数据,然后停300ms等接受,然后想弹出对话框显示其接受内容。但实际上,你的串口发送命令是单开线程运行的,很可能你即使等300毫秒,你的senddata都没有执行完或者还没有执行,所以OnMscommCa也没有给m_strCARXData赋值,因而你第一次messagebox没有内容,但是等你点击关闭了对话框,再弹出第二个的时候,至少也有1秒钟的时间,这个时间对于我们虽短,但对于计算机,线程调度已经n多次,也足够让你的串口发送完,并且也接收完数据,所以就能显示数据了。

回答3:

等待时间不够吧,在打开Remote on之后,做一个while循环,循环中sleep,直到m_str的Length不为0,这样逻辑就比较合理了,为了防止死机,也可以加一个计数器,当等待时间超过10次(3秒)这样子不行就退出循环,返回失败。

回答4:

UpdateData