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

  • 相关阅读:
    U8自动、手动备份不成功 “远程组件初始化失败”
    关于延迟时间的一点智慧
    xe 最大连接数限制、记录客户连接、心跳
    应用开发框架之——根据数据表中的存储的方法名称来调用方法
    固定资产卡片管理累计折旧数不准确
    整理表索引
    用友U8固定资产总账重算语句
    新建自定义报表发布到普通菜单节点流程
    怎么更改月折旧率的小数位
    重建数据库索引等SQL常用语句
  • 原文地址:https://www.cnblogs.com/aimenfeifei/p/4238711.html
Copyright © 2011-2022 走看看