多线程,多接收模式串口类 LsComm 之二
2006-07-21 11:15:53 来源:WEB开发网本文示例源代码或素材下载
描述:一个串口通讯类
应用平台:Windows
版本:v1.2
上次我做的“多线程,多接收模式串口类LsComm”,说实在的有不少的问题 。 好不容易有一段空闲的时间,把以前发现的Bugs修改了一下。
一、Bugs修正
1.ERR : 修改了98下 AutoReceiveBySignal 模式不能正常执行的bug
原因: CcomPort::m_WriteOverlapped.hEvent 没有设置事件!!!!粗心,害人阿。导致在Win98下发送数据异常,不过奇怪在
Win2K正常,而且测试的时候忽略了测试环境平台的影响。
修改: 相应的代码 if(this->IsOverlapped())
2.ERR : 修改了 ManualReceiveByQuery 模式下,发送会出现不动的情况。
{
this->m_hWriteEvent= ::CreateEvent(NULL,true,false,NULL);
if(this->m_hCloseEvent==NULL) return false;
this->m_WriteOverlapped.hEvent = this->m_hWriteEvent;
}
原因: 在dwWriteBytes= this->m_pPort->Write(pBuf,Count);
前,串口已经设置中断,所以需要等待中断事件发生。
修改: 去掉中断设置的代码 this->m_pPort->GetSerialPort()->SetMask(dwStoredFlags);
3.ERR : 打开一个计算机上不存在的串口的时候没有异常捕获。
原因: 没有捕获 CserialPort 抛出的 CserialException 异常
修改: 不过对于异常的处理改为不抛出异常,不知道是否妥当?
try
{
this->m_pPort->Open(nPort,dwBaud,spParity,DataBits,spStopbits,spFC,m_IsOverlapped);
}
catch(CSerialException* pE)
{
//AfxMessageBox(pE->GetErrorMessage());
pE->Delete();
return false;
}
4.ERR : 感觉 AutoReceiveByBreak 意义不大应该去掉
更多精彩
赞助商链接