我最近在开发一个视频监控系统,其中要和一个视频采集的串口设备打交道,我每次处理采集图像时,都采用4个工作者线程来同时处理4幅不同的图像,但目前的问题是此软件运行一段时间后,分别处理图像数据的4个线程有可能有3个或2个或1个要失去响应,我觉得有可能是在征用串口时造成的,请大家看看我的多线程串口同步是不是有什么问题
....
CRITICAL_SECTION pcs;
While(!TryEnterCriticalSection(&pcs))
{
  sleep(0);
}
//写串口
m_serialport.Writetoport();
Sleep(80);
m_serialport.Writetoport();
Sleep(80);
LeaveCriticalSection(&pcs);
...
//注:以上的写串口指令之后的延时是必须的,否则采集结果会出错
请问以上结果有什么不对的,如果大家认为有什么不妥,请告诉小弟一声,在这里多谢大家了!!!

解决方案 »

  1.   

    这样延时是不精确的,建议使用重叠I/O进行操作,可以参照 codeproject 中的 CSerial
      

  2.   

    对不要用延时,不精确,用GetOverlappedResult等待吧
      

  3.   

    延时不精确,也不会造成线程没有相应吧?她可能不需要精确延时呢?!GetOverlappedResult在多线程时有一个毛病,是有可能不会返回,我碰到过这种情况!!你应该用的是重叠I/O进行操作吧?
      

  4.   

    啊,楼上的兄弟说的是真的么?
    我查MSDN好象没发现,也经常这样用