|
串口能够写入,返回写入的数据也不为0。进入读线程函数后,WaitCommEvent却没反应。我真要晕了,模拟器是不是很不稳定,有时同一个程序在不同时间运行出现不同的问题。让我彻底无语...下面是读线程函数的内容,各位大虾看看吧。
DWORD WINAPI ReadPortThread(LPVOID lpvoid)
{ CSerial *cserial=(CSerial*)lpvoid;
BOOL fReadState;
DWORD dwCommModemStatus;
DWORD dwLength;
COMSTAT ComStat;
DWORD dwErrorFlags;
SetCommMask(cserial->hPort,EV_RXCHAR|EV_CTS|EV_DSR);
while(cserial->hPort != INVALID_HANDLE_VALUE
{//等待串口的事件发生
if(WaitCommEvent (cserial->hPort, &dwCommModemStatus, 0))
{SetCommMask(cserial->hPort,EV_RXCHAR|EV_CTS|EV_DSR);
if (dwCommModemStatus & EV_RXCHAR)
{ ClearCommError(cserial->hPort,&dwErrorFlags,&ComStat);
//cbInQue返回在串行驱动程序输入队列中的字符数
dwLength=ComStat.cbInQue;
if(dwLength>0)
{//从串口读取数据
BYTE* buf=new BYTE[256];
fReadState=ReadFile(cserial->hPort,buf,dwLength,&dwLength,NULL);
if(!fReadState)
{//不能从串口读取数据
MessageBox(NULL,TEXT("Error in read from serial port"),TEXT("Read Error"),MB_OK);
}
else
{//把数据赋值给全局变量
cserial->strInChar=buf;
MessageBox(NULL,cserial->strInChar,_T("BINGO"),MB_OK);
}
delete[] buf;
break;
}
}
}
GetCommModemStatus (cserial->hPort, &dwCommModemStatus);
}可能是我读线程函数的调用有误吧.如果调用它的话,是直接调用吗?初次接触这些东西,所以不是很懂。麻烦大家了,谢谢!
|
|