阅读:1349回复:5
串口通讯问题?
监视线程如下:
UINT Receive( LPVOID pParam ) { DWORD dwEvtMask,dwError,dwTransfer; COMSTAT comstat; OVERLAPPED os; bool bSuccess; memset(&os,0,sizeof(OVERLAPPED)); os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); while(((CComControl*)pParam)->m_connection) { TRACE(\"WATCH\\n\"); bSuccess=WaitCommEvent(((CComControl*)pParam)->m_hCom,&dwEvtMask,&os); TRACE(\"WAITCOMMEVENT\\n\"); if(!bSuccess) { dwError=GetLastError(); TRACE(\"GETLASTERROR\\n\"); if(dwError==ERROR_IO_PENDING) { GetOverlappedResult(((CComControl*)pParam)->m_hCom,&os,&dwTransfer,TRUE);//若未监测到通信事件 TRACE(\"GETOVERLOPEDRESULT\\n\"); } } if((dwEvtMask|EV_RXCHAR)==EV_RXCHAR) { TRACE(\"RXCHAR EVENT\\n watiforsigle\\n\"); WaitForSingleObject(((CComControl*)pParam)->postRecvEvent,INFINITE); ResetEvent(((CComControl*)pParam)->postRecvEvent); SendMessage(((CComControl*)pParam)->m_wnd->m_hWnd,WM_MNOTIFY,0,0); TRACE(\"SEND NOTIFY\\n\"); continue; } } CloseHandle(os.hEvent); return 1; } 该线程主要用来监视串口的事件,这里只处理“接收事件“,问题在于当对方只发一个字符时程序运行正确,当发送的字符大于1时,总是要收到两次“接收事件“,为何? |
|
最新喜欢:linwn |
沙发#
发布于:2002-07-31 13:03
我做串口通讯时,现查询串口的队列中有多少数据。然后一起读。而不是来一个读一个。
|
|
|
板凳#
发布于:2002-07-31 15:00
我也不是来一个读一个,我是等它的recv消息,为何在接收字符大于2的时候,他要发两次recv消息。
|
|
地板#
发布于:2002-07-31 18:39
我也碰到这个问题.我的解决办法是:检查comstat.cbinque,若>0,才读.
[编辑 - 7/31/02 by Alexander] |
|
地下室#
发布于:2002-07-31 20:19
我后来也是这样做的,
|
|
5楼#
发布于:2002-07-31 20:30
分数不多,见凉
|
|