stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:1293回复:5

串口通讯问题?

楼主#
更多 发布于:2002-07-31 11:03
监视线程如下:
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时,总是要收到两次“接收事件“,为何?



最新喜欢:

linwnlinwn
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-31 13:03
我做串口通讯时,现查询串口的队列中有多少数据。然后一起读。而不是来一个读一个。
只要能解决问题,就一定给分。 希望高手赐教!
stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-31 15:00
我也不是来一个读一个,我是等它的recv消息,为何在接收字符大于2的时候,他要发两次recv消息。

    
Alexander
驱动大牛
驱动大牛
  • 注册日期2002-02-04
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分-5分
  • 威望-1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-31 18:39
我也碰到这个问题.我的解决办法是:检查comstat.cbinque,若>0,才读.

[编辑 -  7/31/02 by  Alexander]
stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-31 20:19
我后来也是这样做的,
stower
驱动牛犊
驱动牛犊
  • 注册日期2001-06-08
  • 最后登录2010-05-19
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望32点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-31 20:30
分数不多,见凉
游客

返回顶部