zoukankan      html  css  js  c++  java
  • sendmessage和postmessage的区别

    1、POSTMESSAGE(非阻塞)与SENDMESSAGE(阻塞)
    区别1:返回时间不同
    PostMessage发送消息后就立即返回

    SendMessage发送消息后,等待消息处理函数处理完后才返回。

    区别2:返回值不同

    从函数定义上来看,PostMessage的返回值是BOOL,
    意思是返回非0值,消息执行成功,返回0,执行不成功。

    SendMessage的返回值是LRESULT,返回的是消息处理函数后的返回值。

    区别3:同步和异步问题
    如果发送的消息码在WM_USER之下(非自定义消息)且消息参数中带有指针,那么
    PostMessage,SendNotifyMessage,SendMessageCallback这些异步消息发送
    函数将会失败。原因是异步消息发送函数发送后会立即返回,这样会导致消息

    处理函数还未处理消息,消息参数中的指针就被释放了。

    区别4:发送中的过程不同
    在同一个线程中,PostMessage发送消息时,消息要先放入系统消息队列中,
    系统会根据存放的消息,找到对应的线程(窗口、程序)的消息队列中,然后由
    GetMessage/PeekMessage提交给TranslateMessage,如果是键盘、鼠标消息,
    TranslateMessage会处理提交给DispatchMessage,如不是,则直接提交给
    DispatchMessage,最后DispatchMessage经USER模块协助,将消息传递给窗口
    处理函数;而SendMessage发送消息时,由USER模块调用目标窗口的处理函数
    处理消息,并将结果返回。
    不在同一个线程,基本都是用PostThreadMessage代替PostMessage,因为
    PostThreadMessage是直接指定线程ID来确定目标线程;而SendMessage发送
    消息到目标窗口所属的线程的消息队列中,然后发送消息的线程在UESR模块内
    监视和等待消息处理,直到目标窗口处理完返回。
  • 相关阅读:
    BZOJ3171: [Tjoi2013]循环格
    Luogu P1850 换教室(期望dp)
    Luogu P3825 [NOI2017]游戏(2-SAT)
    Luogu P3007 [USACO11JAN]大陆议会The Continental Cowngress
    Luogu P2272 [ZJOI2007]最大半连通子图(Tarjan+dp)
    Luogu P3209 [HNOI2010]平面图判定(2-SAT)
    Luogu P4171 [JSOI2010]满汉全席(2-SAT)
    Luogu P4782 【模板】2-SAT 问题(2-SAT)
    Luogu P2845 [USACO15DEC]Switching on the Lights 开关灯(bfs)
    Luogu P4933 大师(dp)
  • 原文地址:https://www.cnblogs.com/soundcode/p/12523937.html
Copyright © 2011-2022 走看看