解决CserialPort类串口程序中WriteToPort只能发送一次问题
2017-11-09 20:11
1436 查看
现象:每次打开串口只能发送一次,需要关闭再打开或者接收完数据才能发送 成因:在自带串口的电脑、或用优质的USB串口线都没有出现改问题,很有可能跟串口线的质量有关, 调试发现在调用玩WriteToPort函数 SetEvent(m_hWriteEvent);后第一次能够正常进入监视线程(CommThread(LPVOID pParam)) 调用WriteChar(port),然之后,一直进入ReceiveChar(port, comstat),再次发送SetEvent(m_hWriteEvent)也无法去到WriteChar(port)。 分析:某种原因导致一直存在串口接收消息,而(WaitForMultipleObjects)函数在等待事件具有优先级判断,InitPort()函数中 m_hEventArray[1] = m_ov.hEvent; m_hEventArray[2] = m_hWriteEvent;m_ov.hEvent事件(包含接收事件),写串口事件m_hWriteEvent;优先级更高 所以在出现一直存在接收事件时,无法发送数据; Event = WaitForMultipleObjects(3,port->m_hEventArray,FALSE,INFINITE); 解决: 解决的思路是将写串口事件(m_hWriteEvent)的优先级高于接收事件(m_ov.hEvent),如下: 修改 BOOL CSerialPort::InitPort(......){ ...... m_hEventArray[0] = m_hShutdownEvent; // highest priority m_hEventArray[1] = m_hWriteEvent; m_hEventArray[2] = m_ov.hEvent; ...... }
相关文章推荐
- .net利用程序集的GUID解决程序只能运行一次的问题
- java在线聊天项目0.5版 解决客户端向服务器端发送信息时只能发送一次问题 OutputStreamWriter DataOutputStream socket.getOutputStream()
- CSerialPort的WriteToPort 连续发送的问题分析
- 使用CSerialPort类编写串口通信程序的问题
- 使用CSerialPort类编写串口通信程序的问题
- 关于郭天祥51开发板无法烧写程序问题的解决(Prolific USB-to-Serial Comm Port)
- office2007" 向程序发送命令时出现问题 "的解决办法
- 解决JMail发送邮件报错The message was undeliverable. All servers failed to receive the message的问题
- 一次GTK程序内存泄露的解决过程发现的两个内存泄露的问题
- 关于双击cpp文件无法直接打开,VS2008提示“向程序发送命令时出现问题”的解决
- 解决linux下java读取串口之权限问题 No permission to create lock file.
- 发布iOS程序出现“an error occurred uploading to the itunes store”问题的解决办法
- 解决有些程序在3.0环境下只能显示一个很小layout的问题
- 解决Office2007"向程序发送命令时出现错误 "的问题
- 解决win7下打开Excel2007,报“向程序发送命令时出现问题”的错误
- 打开office出现错误:向程序发送命令时出现问题 无法更改 中注册的office 加载项的连接状态 解决办法
- 在ubuntu中配置SSH(解决connect to host localhost port 22: Connection refused问题)
- 凌阳SPCE3200精简开发板:解决附带实验程序中printf无法输出串口调试日志信息的问题
- 解决Office 2007 “向程序发送命令时出现问题“
- 终于解决了nRF24L01接收端只能接收一次数据的问题