CMSComm:SetPortOpen(FALSE)程序被卡
鄢老 2012-03-29 04:37:30 源代码如下:
int CECGSerialPortDlg::StartServer()
{
m_MSComm.SetCommPort(m_stECGSerialPort.iPort);
if (TRUE == m_MSComm.GetPortOpen())
{
m_MSComm.SetPortOpen(FALSE);
}
if (FALSE == m_MSComm.GetPortOpen())
{
m_MSComm.SetPortOpen(TRUE);
}
if (FALSE == m_MSComm.GetPortOpen())
{
AfxMessageBox("Failed to open serial port.");
return 1;
}
m_MSComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_MSComm.SetInputMode(1);//以二进制方式读写数据
m_MSComm.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_MSComm.SetInputLen(0); //设置当前接收区数据长度为0
m_MSComm.GetInput();//先预读缓冲区以清除残留数据
char szSettings[MAX_PATH] = {0};
sprintf(szSettings,"%d,%c,%d,%d",m_stECGSerialPort.iBaudRate,(char)m_stECGSerialPort.iParity,
m_stECGSerialPort.iBitCount,m_stECGSerialPort.iStopBitCount);
m_MSComm.SetSettings(szSettings);
return 0;
}
int CECGSerialPortDlg::StopServer()
{
if (m_bInitDlg && m_MSComm.GetPortOpen())
{
m_MSComm.GetInput();//先预读缓冲区以清除残留数据
m_MSComm.SetOutBufferCount(0);
m_MSComm.SetPortOpen(FALSE);//被卡
}
return 0;
}