📄 subject_19687.htm
字号:
<p>
序号:19687 发表者:草席 发表日期:2002-10-30 16:18:21
<br>主题:为什么?(在线)
<br>内容:关于线程消息的问题<BR>代码如下:<BR>BOOL CTestThread::InitInstance()<BR>{<BR> MSG msg;<BR> PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);<BR> while (GetMessage(&msg, NULL, 0, 0))<BR> {<BR> char *psz = (char *)msg.lParam;<BR> switch(msg.message)<BR> {<BR> case WM_JOB_PRINT_AS_IS:<BR> AfxMessageBox("a");<BR> free(psz);<BR> break;<BR> case WM_JOB_PRINT_REVERSE:<BR> AfxMessageBox("b");<BR> free(psz);<BR> break;<BR> case WM_JOB_PRINT_LOWER:<BR> AfxMessageBox("c");<BR> free(psz);<BR> break;<BR> default:<BR> DispatchMessage(&msg);<BR> }<BR> }<BR> return TRUE;<BR>}<BR>主线程中:<BR> <BR> PostThreadMessage(tid, WM_JOB_PRINT_AS_IS, NULL, (LPARAM)szText);<BR> PostThreadMessage(tid, WM_JOB_PRINT_REVERSE, NULL, (LPARAM)szText);<BR> PostThreadMessage(tid, WM_JOB_PRINT_LOWER, NULL, (LPARAM)szText);<BR><BR>为什么我只能弹出一个"a"?如果我把AfxMessageBox去掉,则在调试环境下,可以看到所有的消息均得到响应?为什么?<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-10-30 16:22:37
<br>内容:不要在线程中使用AfxMessageBox。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:草席 回复日期:2002-10-30 16:24:40
<br>内容:但是根本原因是什么?<BR><BR>AfxMessageBox导致消息循环改变?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:凯凯 回复日期:2002-10-30 16:31:19
<br>内容:以前碰到过这个问题,去掉AfxMessageBox就没事了。<BR><BR>我想是因为AfxMessageBox会挂起调用它的函数,直到它返回,好象是用一个永真循环实现的,这样可能造成了冲突。后来没时间没有仔细去搞这个问题了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:草席 回复日期:2002-10-30 16:35:58
<br>内容:只好不了了之?唉,不好<BR>虽然AfxMessageBox挂起当前函数,但是消息应该仍然存在消息队列里面才对呀<BR>另外,我在主线程中Post WM_QUIT消息给线程,为什么每次都要点两下,线程才结束?<BR>(每点击一下发送一个WM_QUIT消息)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:草席 回复日期:2002-10-30 16:54:26
<br>内容:?凯凯?<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>
回复者:草席 回复日期:2002-10-30 17:09:59
<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>
回复者:凯凯 回复日期:2002-10-30 20:25:17
<br>内容:POST消息响应没有SEND快,你SEND一个看看。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:草席 回复日期:2002-10-30 20:28:28
<br>内容:我知道,send相当于函数调用,先停止当前线程,转去执行消息相应函数<BR><BR>可是用post等了很久也没看到我的thread结束啊
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:草席 回复日期:2002-10-30 20:30:33
<br>内容:好像也没有sendthreadmessage这一说:)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-10-30 21:29:07
<br>内容:哦,如果是线程间的,你自己去看<Windows高级编程指南>的第十一章吧。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:74LS373 回复日期:2002-10-30 22:13:38
<br>内容:另外,我在主线程中Post WM_QUIT消息给线程,为什么每次都要点两下,线程才结束?<BR>(每点击一下发送一个WM_QUIT消息)<BR><BR><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>
回复者:*** 回复日期:2002-10-30 22:21:30
<br>内容:如下:<BR>2002-10-30 22:55:09
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -