| 
					阅读:1463回复: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 
					分数不多,见凉				 | |
 
							 
				 
				