我想下边这样做,难道有什么错误吗?为什么开始的时候一切正常,但是过5分钟左右Run()函数中的循环就退出了。收发的等待时间是200ms绝对没有问题。我在Delphi中用SPCOMM测试过,跟OMRON C200H的PLC通讯,100ms的间隔都可以,工作完全正常。可见不是硬件的问题。真是百思不得其解。高手麻烦帮忙看看呀。BOOL CSerialPortThread::InitInstance()
{
  try
  {
    COMMCONFIG config;
    CSerialPort::GetDefaultConfig(1, config);    port.Open(1, 9600, CSerialPort::EvenParity, 7, CSerialPort::TwoStopBits, CSerialPort::XonXoffFlowControl);
  }
  catch (CSerialException* pEx)
  {
    TRACE(_T("Handle Exception, Message:%s\n"), pEx->GetErrorMessage());
    pEx->Delete();
  }
    
 // SetTimer(NULL,1001,50,NULL);

  return TRUE;
}int CSerialPortThread::Run() 
{
// TODO: Add your specialized code here and/or call the base class
static int i=0;
while(true)
{
strcpy(szMessage,"@00TS1234567890ABCDEF");
GenerateFCS(szMessage);
port.WriteEx(szMessage,strlen(szMessage));
port.Flush();
memset(szMessage,0,256);
Sleep(100);
port.ReadEx(szMessage,10);
if(CheckFCS(szMessage))
{
MessageBox(NULL,"数据校验错误!!!","提示",MB_ICONSTOP);
break;
}
Sleep(100); TRACE("\n Times Count: %d",i);  // 这里最后一次显示266 i++;
} port.Close();

return CWinThread::Run();
}

解决方案 »

  1.   

    是不是异常?把 while 中的代码用 
    try {
    }
    catch(...)
    {
    }
    括起来看看?
      

  2.   

    真正好的串口程序才不需要定时机制读写串口,一般都会开一个线程来监控串口,要读写串口的时候都会设置事件,用单独的线程来读写串口,...................串口程序我做过,一见到这种的就不舒服用sleep,太不科学了,
    你的函数怎么叫退出了有没有MessageBox(NULL,"数据校验错误!!!","提示",MB_ICONSTOP);