zoukankan      html  css  js  c++  java
  • GetMessage()和PeekMessage()区别

    GetMessage()

    原型:
    BOOL GetMessage(LPMSG lpMsg, HWND hWNd, UINT wMsgFilterMin, UINT wMsgFilterMax);

    Retrieves a message from the calling threads queque. The function dispatches incoming sent message until a posted message is available for retrieval.


    从调用线程的消息队列中取得一个消息并将该消息放在指定的结构(MSG).此函数可取得与指定窗口联系的消息和由PostThreadMessage寄送的消息。次函数接受一定范围的消息值。由GetMessage不接受属于其他线程或者应用程序的消息。获取消息成功后,线程将从消息队里中删除该消息。

    函数会一直等待直到有消息到来才有返回值。

    备注:

    应用程序通常用返回值来确定是否终止主消息循环并退出程序。
    GetMessage值接受与参数hWnd标示的窗口或子窗口相关联的消息。如果hWnd为NULL,则GetMessage接受属于调用线程的窗口消息,线程消息由函数PostThreadMessage()寄送给调用线程。GetMessage不接受其他线程或者其他线程的窗口消息。如果UINT wMsgFilterMin, UINT wMsgFilterMax都为0,则Getmessage返回所有可得到的消息(即,如范围考虑)。

    GetMessage不从队列里清除WM.PAINT消息。该消息将保留在队列里直到处理完毕。

    ...............................................................................

    PeekMessage()

    原型
    BOOL PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMSGfilterMin, UINT wMSGfilterMax, UINT wRemoveMsg)

    wRemoveMsg
    确定消息如何被处理。此参数可取下列值之一:

    PM_NOREMOVE PeekMessage处理后,消息不从队列里除掉。
    PM_REMOVE PeekMessage处理后,消息从队列里除掉。
    PM_NOYIELD 此标志使系统不释放等待调用程序空闲的线程。可将PM_NOYIELD随意组合到PM_NOREMOVE或PM_REMOVE。


    备注:

    函数GetMessage不一样的是,GetMessage:从系统获取消息,将消息从系统中移除,属于阻塞函数。当系统无消息时,GetMessage会等待下一条消息。

    函数PeekMesssge是以查看的方式从系统中获取消息,可以不将消息从系统中移除,是非阻塞函数;当系统无消息时,返回FALSE,继续执行后续代码。

    PeekMessage通常不从队列里清除WM_PAINT消息。该消息将保留在队列里直到处理完毕。但如果WM_PAINT消息有一个空更新区,PeekMessage将从队列里清除WM_PAINT消息。

  • 相关阅读:
    2020.10.23 19级training 补题报告
    2020.10.17 天梯赛练习 补题报告
    2020.10.16 19级training 补题报告
    2020.10.9 19级training 补题报告
    2020.10.10 天梯赛练习 补题报告
    2020.10.3 天梯赛练习 补题报告
    2020.10.2 19级training 补题报告
    第十届山东省ACM省赛复现补题报告
    VVDI Key Tool Plus Adds VW Passat 2015 Key via OBD
    Xhorse VVDI Prog Software V5.0.3 Adds Many MCUs
  • 原文地址:https://www.cnblogs.com/aimenfeifei/p/4238711.html
Copyright © 2011-2022 走看看