怎么样在线程外部结束掉WaitCommEvent()等待事件?
代码如果下:
void ExitComRecvThread( HANDLE hCom )
{
//注:是接受程序自己调用该函数,不是串口的另外发送端的有关事件
//能够让程序运行到A或者B,这样就可以控制前面的线程退出
?????
}
unsigned __stdcall GCmnCom::__RecvThrd( void* pParam )
{
unsigned long lEnt = 0;
HANDLE hCom = (HANDLE)pParam;
DWORD dwEvent = EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING | EV_RLSD | EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY ;
SetCommMask( dwEvent );
while( TRUE )
{
if ( ::WaitCommEvent( m_hDevice, &lEnt, 0 ) )
{
if ( lEnt & EV_RXCHAR )
{
// read data....
} else {
//A
}
} else {
//B
}
}
return 0;
}
}
[解决办法]
关闭端口应该可以吧
[解决办法]
最好用异步模式
[解决办法]
原来这个意思,那为什么不能用异步呢,你也应该知道直到等待事件发生为止,函数WaitCommEvent是不会返回的。
你可以试试开启个定时然后与那条线程通讯,当那条线程一定时间无响应时,强制结束他,然后重新启动个线程,看看可行否。