现在的位置: 首页 > 综合 > 正文

MFC中消息循环处理的几个函数之间的区别

2013年02月23日 ⁄ 综合 ⁄ 共 847字 ⁄ 字号 评论关闭
  1. 1
     函数GetMessage 
    是从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收一定范围的消息值。GetMessage不接收属于其他线程或应用程序的消息。获取消息成功后,线程将从消息队列中删除该消息。函数会一直等待直到有消息到来才有返回值。
     
    PostMessage 与 SendMessage 函数对比

      SendMessage把消息直接发送到窗口,并调用此窗口的相应消息处理函数,等消息处理函数结束后SendMessage才返回!SendMessage发送的消息不进入系统的消息队列;SendMessage函数有返回值
      PostMessage将消息发送到与创建窗口的线程相关联的消息队列后立即返回;PostMessage函数没有返回值;

  2. 2
      GetMessage 与 PeekMessage函数的对比
      GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax)
      PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax,UINT wRemoveMsg)
  3. 3
      根据参数可以看出以上2个函数的区别,参数wRemoveMsg的作用是指定消息获取的方式,如果设为PM_NOREMOVE,那么消息将不会从消息队列中被移出,如果设为PM_REMOVE,那么消息将会从消息队列中被移出;
  4. 4
      还有区别:
      他们如果没有捕获到消息,程序的主线程会被操作系统挂起。当操作系统再次回来照顾此线程时,发现消息队列中仍然没有消息可取,此时两个函数的行为就不同了:
  5. 5
      GetMessage : 过门不入,操作系统再次挂起此线程,去照顾别的线程;
      PeekMessage: 取回控制权,使程序执行一段时间,等待可能的消息进入消息队列并将其捕获;这时程序进入空闲时间阶段;

抱歉!评论已关闭.