MScomm控件串口被占用的异常处理

来源:互联网 发布:数控铣编程软件 编辑:程序博客网 时间:2024/05/24 04:24
最近在调试一个MFC的程序,通讯部分使用的是MScomm串口控件,我们的通信过程是首先找到设备的ID和Com口号,然后根据设备的ID做不同的数据发送和接收。这里少了一个判断串口是否被占用的情况,虽然使用
if (!m_CMscomm.get_PortOpen())
{
   m_CMscomm.put_PortOpen(TRUE);
   return 0;
}
判断串口有没有被打开,但是调试发现,不管串口有没有被占用,get_ProtOpen()返回的都是FALSE,如果串口被占用,再put_PortOpen()打开串口,就会抛出异常,然后通讯界面和通讯按钮就会死掉。既然MSComm控件的方法不能实现串口被占用的判断,那么就自己使用try{}...catch{}来处理异常。贴出异常处理部分的代码,如下:
try
{
m_CMscomm.put_PortOpen(TRUE);
return 0;
}
catch (CException* e)
{
m_CMscomm.put_OutBufferCount(0);
CString showInfo;
showInfo.Format("打开串口-COM%d 失败!", portNo);
AfxMessageBox(showInfo);
return -1;
}
前面的基本设置代码就不贴了。这里如果串口被占用,在执行put_PortOpen()时程序会直接捕获CException抛出的代码,进入catch的异常处理了。然后根据返回值,再做下一步处理就可以了。
结语:个人水平有限,描述的比较混乱,希望对有需要的人有点帮助即可。
0 0
原创粉丝点击