Postmessage 好用吗?(200分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
大家知道postmessage是发送消息后就不管的,那么能否保证消息准确送到?<br>或者说可靠度有多高? 那些因素(机器速度/其他程序...)会影响到可靠度?<br><br>我现在需要给另一个程序发送一系列消息,但是另一个程序处理这些消息<br>很缓慢,如果用sendmessage的话,整个过程持续时间比较长,我不知道能否<br>用postmessage代替?
 
postmessage一般是用来检测消息队列用的,如果你发出消息后不关心结果当然还是比<br>较可靠的,想要结果的话还是使用SendMessage
 
PostMessage发出的消息应该是要和其它消息一起排队的吧?<br>所以系统比较繁忙的时候估计会降低效率的。<br>&gt;果用sendmessage的话,整个过程持续时间比较长<br>指什么过程?<br>
 
不过我觉得[理论上],还是应该收的到的
 
我认为是安全可靠的,<br>只不过POSTMESSAGE没有返回值,没办法判断消息是否按预期的情况执行。<br>比如你可能想让某个窗口最小化,对方收到了消息,但对方“拒绝”最小化。<br>你的程序没办法知道对方最终是否最小化了。<br>
 
如果用sendmessage,只要该函数返回,就可以知道消息贝接收了.<br>如果用postmessage,我无法保证消息贝接收,因为我猜测有些消息会被漏掉,<br>比如系统繁忙的时候---会吗?<br><br>&gt;&gt;指什么过程?<br>对方程序受到消息后,会进行一段时间的处理,才退出WndProc函数,而这时<br>我的程序就会处于等待状态,直到她处理完毕.这样的消息有很多,等待时间<br>过长.
 
我觉得要看系统可不可靠<br>我用过还可以(系统不忙)
 
Kang: 怎么看呢?
 
If the function succeeds, the return value is nonzero.<br>如果成功,是不是说明已经送到队列里了?
 
送到队列里面不一定就能贝受到吧? 会不会有消息丢失?
 
会丢失的。如果想要可靠的话,应该采用钩子函数实现。<br>具体情况在《Delphi4从入门到精通》里面有
 
TO SANTGAN:<br>真的会丢失吗? 难以相信。能不能把书里内容贴一下?
 
有些会,有些不会,一般的消息应该不会,
 
我说了,理论上不会,呵呵<br>不过CAKK啊,你的问题在,如果SENDMESSAGE,那么发送消息的应用程序需要等待<br>解决方法很简单,开个专门的现成来发消息咯
 
只要postmessage成功,而且对方进程没有在处理消息前死掉,或者目的是窗口,窗口<br>没有关闭,是一定能处理的。<br><br>如果消息队列满了,那postmessage返回值就会表明消息没有放进队列<br><br>如果放进了队列,系统不会又把他踢出去的
 
如果对方每接到一个消息都需要比较长的时间处理,那么消息队列会变满的<br>(消息都在创建窗口的线程那里接收)<br>可以不要每接收一个消息就立即在本线程处理,可以创建新线程处理,然后本线程<br>立即返回,如果消息来的又快有多,同时运行的线程比较多,也不好,可以建几个<br>线程,把任务放进其他线程的一个自己建的命令队列里面去。<br>只要处理消息那个线程接到消息返回的快,用post、用send都无所谓啦
 
post消息应该不会丢,除非象pipi所说队列满了,因为postmessage是系统完成的,<br>系统肯定会放到目的队列中去的。又不是串行通讯。另外,sendmessage和<br>postmessage是根本不同的,sendmessage不往消息队列里放,而直接去调用<br>消息处理函数,所以要等待完成。
 
好,如果你们说的都对,那么有没有什么权威资料证明?
 
》那么有没有什么权威资料证明?<br>当然。<br><br>消息处理中另外起一个线程处理、自己立即返回,是经验主义,我一直这样做。<br><br>至于说消息在队列中不会被删除,见msdn,(WM_PAINT 除外)
 
后退
顶部