📄 subject_44143.htm
字号:
<p>
序号:44143 发表者:shenjie 发表日期:2003-06-16 22:17:46
<br>主题:关于消息处理机制
<br>内容:在API编程中,只有在一条消息处理完成之后才能继续处理其它的消息,也就是说,如果在一个消息处理函数中向消息队列中添加一条消息,那么必须等到这个处理函数完成后才有可能处理刚才新发送的消息。但是在MFC程序中却不是这样,PostMessage写入消息循环的消息竟然被立刻处理,即使程序仍然在一个消息处理函数的运行中,新发送的消息仍然可以即时被处理,这是怎么回事啊?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:jasic 回复日期:2003-06-17 10:57:41
<br>内容:你可能误会了一个问题!<BR>postmessage是将一个消息发送到对应的消息队列中后立即返回,不论这条消息有没有处理。这是一种异步处理的方式。并不是你说的立即得到处理!<BR>而sendmessage则是当消息处理后,才得意返回!这是类似于阻塞!<BR>不知道能不能拿到你的<BR>50<BR>分!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:shenjie 回复日期:2003-06-17 11:28:30
<br>内容:我当然清楚PostMessage和SendMessage的区别。在不用MFC的WIN32编程中,由于PostMessage的异步方式,发送的消息被写入程序的消息队列,然后等到程序完成目前的消息处理函数后才能由消息循环读入并调用窗口过程处理刚才发送的消息。也就是说如果在窗口过程中写成这样:<BR>case WM_COMMAND:<BR>wmId = LOWORD(wParam); <BR>wmEvent = HIWORD(wParam); <BR>switch (wmId)<BR>{<BR>…… <BR>case IDM_EXIT:<BR>::PostMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDM_ABOUT,0),0);<BR>DestroyWindow(hWnd); <BR>break;<BR>……<BR>}<BR>break;<BR>点Exit后程序向消息队列加入要求出现About对话框的消息,但是由于DestroyWindow的调用使得这个消息还没来得及处理,程序就已经被关闭了。但是在MFC中似乎并不是这样,PostMessage的调用感觉和SendMessage一样(虽然它们有是否写入消息队列的区别),即使在一个消息处理函数执行时,新发送的消息仍然可以被及时处理。我查了不少资料,都找不到对这种机制的解释。还望大家指点,谢谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Fang 回复日期:2003-06-18 13:53:39
<br>内容:什么叫“及时处理”,中断POSTMESSAGE下一行的执行,直接去执行消息处理代码?我看不是这样,
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:shenjie 回复日期:2003-06-18 19:59:51
<br>内容:谢谢诸位,我已经明白是怎么回事了,主要是因为原来我对MessageBox的工作方式理解有错误造成的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -