我以NON-OVERLAPPED方式打开串口,完成串口设置后,开起两个线程(一个读串口,一个写串口),读串口的线程用WaitCommEvent等待串口事件发生:WaitCommEvent(hComPort, &dwComEvent, NULL);
现在的问题是,只要这个函数不返回,其他线程中对串口的操作全部被阻塞,比如说,写串口的函数WriteFile(hComPort, lpOutputBuf , dwOutputDataLen , &dwActualBytesWrite, 0);会一直被阻塞,直到WaitCommEvent等到串口事件返回后,WriteFile函数才返回。更郁闷的是,如果WaitCommEvent不返回,连CloseHandle(hComPort)都会被阻塞。我现在要把程序移植到WINCE系统上去运行,串口又只能以NON-OVERLAPPED方式打开,如果不使用WaitCommEvent函数,又无法检测到串口事件的发生,这可如何是好啊!各位大侠,可有解决的方法啊?急等!

解决方案 »

  1.   

    我用的是同步串口通信,只要这个WaitCommEvent不返回,调用什么函数,什么函数就被阻塞,但一般情况下,如果串口没收到数据,或者无错误发生,WaitCommEvent是不会返回的啊!
      

  2.   

    那就不要用WaitCommEvent来做,用多线程来读写、检测状态。
      

  3.   

    http://www.vckbase.com/document/viewdoc/?id=191
      

  4.   

    既然是 NON-OVERLAPPED 方式,为什么还用WaitCommEvent?
    WaitCommEvent 必须是OVERLAPPED方式才不会阻塞。
      

  5.   

    同步处理不需要 WaitCommEvent,只需要 ReadFile /WriteFile 就可以了
      

  6.   

    但串口通信还是建议使用异步方式,比较实用一些
    可以去 www.codeproject.com 搜寻几个比较好用的串口类
      

  7.   

    请参考这里:
    http://www.vckbase.com/document/viewdoc/?id=1114  使用Win32创建串口通讯程序
    http://www.vckbase.com/document/listdoc.asp?mclsid=9&sclsid=907&page=1