关于循环的消息

if(m_hEventWnd)
  {
   :: PostMessage(m_hEventWnd,WM_GRPDOWNBEGIN,NET_SHORT(pGroupAck->groupCount),NET_SHOR(pGroupAck->deviceCount));
  }

以上这段代码如果被调用,然后循环调用

    if(m_hEventWnd)
    {
     ::PostMessage(m_hEventWnd,WM_CARDOWNDETAIL,(WPARAM)pci,0);
    }

什么意思呢?比如说下载车辆信息吧,下载一次socket就给主窗体发消息,说明车队总数pGroupAck->groupCount和车辆总数pGroupAck->deviceCount,然后socket又接着收到每一个车辆的信息,循环发给m_hEventWnd,而在m_hEventWnd我想通过一个方法处理这两个消息,可以利用PeekMessage这个API函数,每次网消息队列里面取到并删除车辆信息

代码如下:

 time_t startTime = time(NULL);
 while(1)
 {
  BOOL ret = FALSE;
  while(ret = PeekMessage(&msg, NULL, 0, 0,PM_REMOVE))
  {
   if(msg.message == msgType || msg.message == WM_NOMOREDATA)
   {
    return 0;
   }
   else
   {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
   }
   if(!m_sockClient.IsConnect())
   {
    return 1;
   }
   if(time(NULL) - startTime > timeout)
   {
    return 2;
   }
  }
  if(!ret)
  {
   Sleep(1);
  }
 }
 return 2;

posted @ 2011-08-11 15:36  银翼的魔术师  阅读(135)  评论(0编辑  收藏  举报