多线程,多接收模式串口类 LsComm 之二
2006-07-21 11:15:53 来源:WEB开发网原因: 全部的事件都可以用AutoReceiveBySignal方式实现
修改: 暂时保留:DWORD dwStoredFlags = EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING |EV_RLSD | EV_RXCHAR | EV_RXFLAG ;
//??| EV_TXEMPTY 添加后在首次执行时总是接收不到全部数据 ,以后就正常了。现在还搞不清楚是什么原因。
5. ERR : 感觉 ManualReceiveByConst 意义不大应该去掉
原因: 实现方式不太好
修改: 暂时保留
二、遗留问题
1.ERR : 流控制模式下可能不正确,自己在这方面没有经验,没有测试。
2.ERR : 结构问题,把 this->m_ComPort.GetSerialPort() 获取 CserialPort 的指针好像不妥,如果类的使用者在程序中这样用 this->m_ComPort.GetSerialPort()->Close();
收发数据的时候就会产生异常。但是由于使用别人的CserialPort类 ,比较
稳定,但有不能破坏别人代码的完整性。
3.ERR : ManualReceiveByConst 方式受 CommTimeOUts 的影响可能不太准确。
其它问题:我的计算机上只有一个串口可用,所以是2-3口短接进行的测试,其它测试还不太完全。
三、由于前一段时间确实比较忙,有好多网友提出的问题,都没有回复,实在非常抱歉,在这里简单的回复一下
1.风也飘飘:你好,我感觉这个类做的很好,但我想实现两台电脑之间的实时数据传输(为字符型),不知道怎么用,可否指点一二?
答: 感觉可以这样写: (1)首先:定义一个接收函数: void OnReceiveData(LPVOID pSender,void* pBuf,DWORD InBufferCount)
(2)然后,打开串口,监听Com2
{//在此处理要接收的数据
} this->m_ComPort.Open(2,LsComm::CComPort::AutoReceiveBySignal );
(3)发送:
this->m_ComPort.SetReceiveFunc((FOnReceiveData)OnReceiveData,this);char a[10000];//字符数组
感觉在C里面是不分 char 和字节的,像 char c=’a’;和char c=0x61;是一样的,只不过 char 只能取字符类型范围,超过就被截短。
BYTE b[10000];//字节数组
memset(a,''''a'''',sizeof(a));
memset(b,0x0b,sizeof(b));
this->m_ComPort.Output(a,sizeof(a)); //发送字符数组
this->m_ComPort.Output(b,sizeof(b)); //发送字节数组
更多精彩
赞助商链接