函数:
BOOL CSerialPort::InitPort(CWnd* pPortOwner,
UINT portnr,UINT baud,
char parity,
UINT databits,
UINT stopbits,
DWORD dwCommEvents,
UINT writebuffersize)
函数内容开头部分:
assert(portnr > 0 && portnr < 5);
assert(pPortOwner != NULL);
unsigned int t = 0;
// 关闭打开的线程
if (m_bThreadAlive)
{
/*do
{
SetEvent(m_hShutdownEvent);
} while (m_bThreadAlive);</span>*/
/*************************************************************/
MSG message;
while (m_bThreadAlive)
{
if (::PeekMessage(&message, m_pOwner->m_hWnd, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
SetEvent(m_hShutdownEvent);
}
/**************************************************************/
TRACE("Thread ended\n");
}
在连接机器时初始化串口会出现死循环的问题。
倍屏蔽的部分为原串口类的的循环,这个使用容易造成死循环,换成星号区域内的代码就可以了。
本文介绍了一种解决串口初始化过程中出现死循环的方法。通过修改原有串口类中的循环处理逻辑,替换为新的消息处理机制,有效避免了程序在此处陷入无限循环的问题。
1605

被折叠的 条评论
为什么被折叠?



