有2个窗口A、B, A是父窗口。A、B窗口都要接收串口数据,接收的内容不一样。串口初始化在A类内,A、B窗口都是创建线程来接收数据,调用相同的读函数(该函数在A类内实现), A 能正确接收到数据,而B页面,则不能完整接收数据(12个字节数据只收到6个左右,一般第一个字节和最后几个字节能收到)。读串口代码如下:如果在B页面调试时单步执行do~while循环体则可以接收完12个字节;如果在RealFile()函数后面增加Sleep(2)则可以将接收字节数增加到10个,但无论如何接收不完12个字节。串口初始化的读时延也进行过多次不同值设置,依然无解。另:波特率是4800,如果我跟PC机通信将波特率设置为19200并在RealFile()函数后Sleep(1),则可接收完12个字节,但采样模块只能用4800。
bReadResult = WaitCommEvent(handle_com, &dwCommModemStatus, 0);//等待事件发生
SetCommMask (handle_com, EV_RXCHAR | EV_CTS | EV_DSR | EV_TXEMPTY);//重新设置要等待的信号
if (bReadResult && (dwCommModemStatus & EV_RXCHAR)) //接收到数据
{
if (WaitForSingleObject(m_SysEvent, 500) == WAIT_OBJECT_0)
{
do
{
dwNumBytesRead = 0;
Byte = 0;
// Read the data from the serial port.
bReadResult = ReadFile(handle_com, &Byte, 1, &dwNumBytesRead, 0);
//Sleep(2);
// Display the data read.
if (dwNumBytesRead == 1)
{
data[len++] = Byte;
}
}while (bReadResult && (dwNumBytesRead == 1) && (len < MAX_FRAM_LEN));
}
}//end if
该问题困扰我2个星期一直得不到解决,望同行们给力,分析一下是什么问题造成的,谢过~
再问:程序从A进入B后,A的接收线程是不是被系统挂起了呢,也就是说该线程不工作了?