• 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消息。

  • 相关阅读:
    第五天——编码进阶(三)
    vue系列---------vuejs基础学习3.0
    前端随心记---------vuejs基础学习2.2
    前端随心记---------HTML5+CSS系列5.0
    前端随心记---------Ajax
    前端随心记---------前后端验证用户名案例(php,mysql结合)
    前端随心记---------MySQL
    前端随心记---------PHP
    vue系列---------vuejs基础学习2.1
    前端随心记---------HTML5+CSS系列4.0
  • 原文地址:https://www.cnblogs.com/aimenfeifei/p/4238711.html
Copyright © 2020-2023  润新知