多线程,多接收模式串口类LsComm
2010-06-23 20:40:59 来源:WEB开发网主要是一个等待事件发送然后调用,响应的过程,如果读取事件发生则调用this->HandleReadEvent(this->m_ReadOverlapped);
bool CReadComThread::HandleReadEvent(OVERLAPPED& overlapped)
{
if(this->m_pPort->GetSerialPort()->GetOverlappedResult(overlapped,this->m_InBufferCount,false))
{
return this->HandleData();
}
DWORD dwError = ::GetLastError();
if(dwError==ERROR_INVALID_HANDLE)
return false;
else
return true;
}
如果查询有数据,则this->HandleData();
bool CReadComThread::HandleData() //处理读取数据
{
if(this->m_InBufferCount>0)
{
this->m_pBuffer = new byte[this->m_InBufferCount];
for(int i=0;i<(int)this->m_InBufferCount;i++)
{
this->m_pBuffer[i] = this->m_InputBuffer[i];
}
this->m_pPort->ReceiveData(this->m_pBuffer,this->m_InBufferCount);
delete[] this->m_pBuffer;
}
return true;
}
在这调用了this->m_pPort->ReceiveData(this->m_pBuffer,this->m_InBufferCount);即调用了你传入的函数.整个读取过程就这样了.如果还有不明白,请看我写的CComPort的类的代码.
当然,由于串行通讯各种情况综合在一起比较复杂,另外本人水平有限,所以一时很难考虑全面,这个版本暂时定为1.0,希望大家如果在使用过程中发现什么问题,请及时的告诉偶(E-Mail:Milo2002@sohu.com),有时间我做个升级什么的,当然,希望大家多多提出批评意见.
本文配套源码
更多精彩
赞助商链接