WEB开发网
开发学院软件开发VC 多线程,多接收模式串口类 LsComm 之二 阅读

多线程,多接收模式串口类 LsComm 之二

 2006-07-21 11:15:53 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 描述:一个串口通讯类应用平台:Windows版本:v1.2上次我做的“多线程,多接收模式串口类LsComm”,多线程,多接收模式串口类 LsComm 之二,说实在的有不少的问题 , 好不容易有一段空闲的时间,DataBits,spStopbits,把以前发现的B

本文示例源代码或素材下载

描述:一个串口通讯类

应用平台:Windows

版本:v1.2

上次我做的“多线程,多接收模式串口类LsComm”,说实在的有不少的问题 。 好不容易有一段空闲的时间,把以前发现的Bugs修改了一下。

一、Bugs修正

1.ERR : 修改了98下 AutoReceiveBySignal 模式不能正常执行的bug

原因: CcomPort::m_WriteOverlapped.hEvent 没有设置事件!!!!粗心,害人阿。导致在Win98下发送数据异常,不过奇怪在

Win2K正常,而且测试的时候忽略了测试环境平台的影响。

修改: 相应的代码 if(this->IsOverlapped()) 
  {  
    this->m_hWriteEvent= ::CreateEvent(NULL,true,false,NULL); 
    if(this->m_hCloseEvent==NULL)    return false; 
    this->m_WriteOverlapped.hEvent = this->m_hWriteEvent; 
  }
2.ERR : 修改了 ManualReceiveByQuery 模式下,发送会出现不动的情况。

原因: 在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 意义不大应该去掉

1 2 3 4 5  下一页

Tags:线程 接收 模式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接