我以NON-OVERLAPPED方式打开串口,完成串口设置后,开起两个线程(一个读串口,一个写串口),读串口的线程用WaitCommEvent等待串口事件发生:WaitCommEvent(hComPort, &dwComEvent, NULL);
现在的问题是,只要这个函数不返回,其他线程中对串口的操作全部被阻塞,比如说,写串口的函数WriteFile(hComPort, lpOutputBuf , dwOutputDataLen , &dwActualBytesWrite, 0);会一直被阻塞,直到WaitCommEvent等到串口事件返回后,WriteFile函数才返回。更郁闷的是,如果WaitCommEvent不返回,连CloseHandle(hComPort)都会被阻塞。我现在要把程序移植到WINCE系统上去运行,串口又只能以NON-OVERLAPPED方式打开,如果不使用WaitCommEvent函数,又无法检测到串口事件的发生,这可如何是好啊!各位大侠,可有解决的方法啊?急等!
现在的问题是,只要这个函数不返回,其他线程中对串口的操作全部被阻塞,比如说,写串口的函数WriteFile(hComPort, lpOutputBuf , dwOutputDataLen , &dwActualBytesWrite, 0);会一直被阻塞,直到WaitCommEvent等到串口事件返回后,WriteFile函数才返回。更郁闷的是,如果WaitCommEvent不返回,连CloseHandle(hComPort)都会被阻塞。我现在要把程序移植到WINCE系统上去运行,串口又只能以NON-OVERLAPPED方式打开,如果不使用WaitCommEvent函数,又无法检测到串口事件的发生,这可如何是好啊!各位大侠,可有解决的方法啊?急等!
WaitCommEvent 必须是OVERLAPPED方式才不会阻塞。
可以去 www.codeproject.com 搜寻几个比较好用的串口类
http://www.vckbase.com/document/viewdoc/?id=1114 使用Win32创建串口通讯程序
http://www.vckbase.com/document/listdoc.asp?mclsid=9&sclsid=907&page=1