现在接手一个模块 里面有两个功能要求还没有解决 网上找了一下 也没有什么头绪,请各位大大帮忙看一下,谢谢
问题1. 我现在有两个线程 A线程不停的向B线程 postthreadmessage 而B里的实现大致如下
MSG msg;
BOOL bRet;
while ((bRet = GetMessage( &msg, NULL, 0, 0 )) != 0 )
{
if(msg.wParam ==XXXXX || msg.wParam == XXXXX)
::AfxMessageBox(XXX); }
不明白的地方是:
假如A线程发的第一个消息过来以后 进入::AfxMessageBox(XXX)后 我如果长时间不点掉这个MsgBox的话(A线程
还在继续发消息),等点掉以后再次走到GetMessage这个地方时,A在刚才过程中发的其他消息全部都获取不到了,但
是如果把AfxMessageBox(XXX)屏蔽掉的话 所有消息都是能得到的,我不清楚这是为什么,并且如何保证所有消息我
都能获取到,因为我不能保证这个AfxMessageBox(或者是其他耗时较长的函数)什么时候返回,而且我也不能用线程
来规避这个长时间的函数。
问题2. 我这个模块是在一个SDK中的,规定不能使用窗口 那么我如何获取到系统待机的消息呢?待机的系统broadcast似乎
只给窗口发送了.
新人没什么分,只有谢谢高手们了..很抱歉
问题1. 我现在有两个线程 A线程不停的向B线程 postthreadmessage 而B里的实现大致如下
MSG msg;
BOOL bRet;
while ((bRet = GetMessage( &msg, NULL, 0, 0 )) != 0 )
{
if(msg.wParam ==XXXXX || msg.wParam == XXXXX)
::AfxMessageBox(XXX); }
不明白的地方是:
假如A线程发的第一个消息过来以后 进入::AfxMessageBox(XXX)后 我如果长时间不点掉这个MsgBox的话(A线程
还在继续发消息),等点掉以后再次走到GetMessage这个地方时,A在刚才过程中发的其他消息全部都获取不到了,但
是如果把AfxMessageBox(XXX)屏蔽掉的话 所有消息都是能得到的,我不清楚这是为什么,并且如何保证所有消息我
都能获取到,因为我不能保证这个AfxMessageBox(或者是其他耗时较长的函数)什么时候返回,而且我也不能用线程
来规避这个长时间的函数。
问题2. 我这个模块是在一个SDK中的,规定不能使用窗口 那么我如何获取到系统待机的消息呢?待机的系统broadcast似乎
只给窗口发送了.
新人没什么分,只有谢谢高手们了..很抱歉
解决方案 »
- 请教:函数参数为CString *类型,会什么返回的是空呢?
- 请问server怎么接受client端的命令请求?最好给个开源的源代码
- 倒分贴
- 模态对话框显示出来了,上面的static文字却没有显示出来,why?
- 如何用XML来保存和导入画好的图?请大家提供思路
- 谁有监测系统信息的相关资料(源程序最好)
- 请问哪里有ORACLE工具ObjectBrowser下载啊?官方网站已经停止下载了。
- 谁有ws2_32.dll的那个函数hook文件?
- 在TreeCtrl中如何插入节点至第一个节点之前?
- Web 页面中各元素/控件的接口的获取
- VS2005,CMyView类莫名其妙的消失了
- 在MFC里面一个函数定义为abc()和abc(void)有区别吗?
假如A线程发的第一个消息过来以后 进入::AfxMessageBox(XXX)后 我如果长时间不点掉这个MsgBox的话(A线程
还在继续发消息),等点掉以后再次走到GetMessage这个地方时,A在刚才过程中发的其他消息全部都获取不到了,但
是如果把AfxMessageBox(XXX)屏蔽掉的话 所有消息都是能得到的,我不清楚这是为什么,并且如何保证所有消息我
都能获取到,因为我不能保证这个AfxMessageBox(或者是其他耗时较长的函数)什么时候返回,而且我也不能用线程
来规避这个长时间的函数。
==========
AfxMessageBox应该会弹出一个模态对话框,而模态对话框中是有消息循环的,所以发来的消息被对话框中的消息循环获得了,队列中没了,所以你的代码中的GetMessage就取不到了。如果用一个非模态对话框应该会避免这个问题。
只给窗口发送了.
========
这里有个文章,可能对你有帮助:参考