MFC中ProcessMessage()函数有什么作用?

在一个SDI应用程序中,有一个按钮的消息响应函数里有下列代码:voidCSXS_testView::OnCapContinue(){……………………while(state... 在一个SDI应用程序中,有一个按钮的消息响应函数里有下列代码:
void CSXS_testView::OnCapContinue()
{

…………
…………
while(stateRunning)
{
//执行测量操作
//进行数据处理采集
sxSystem.process();
//处理消息队列
ProcessMessage();
//更新窗口画面
Invalidate();
CTools::delayMsMessage(50);

}
…………
…………
}

其中,ProcessMessage()的定义为
void CSXS_testView::ProcessMessage()
{
//消息变量
MSG msg;
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}

我想知道ProcessMessage()是干什么用的,它在OnCapContinue() 消息响应函数中能完成什么功能?

在CSDN里找不到合适的回复,只能求助百度,希望大神能帮忙
展开
 我来答
龚炜林
2013-05-04 · TA获得超过1560个赞
知道大有可为答主
回答量:1102
采纳率:66%
帮助的人:591万
展开全部
MFC SDI执行顺序大致是:AfxWinMain在WinMain这个程序入口点被调用,有个全局对象是theApp,它类型为你工程中派生自CWinApp的派生类类型。AfxWinMain调用其成员函数,初始化、然后创建窗口(CMainFrm),然后进入Run,在Run里
while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
//调用窗口对应的消息处理函数
TranslateMessage (&msg);
DispatchMessage (&msg);
}
而这个PeekMessage是从当前线程的消息队列获取消息。你程序中如果使用PostMessage则可以把消息放入消息队列,但是要等待上一条消息被处理完,如果使用SendMessage,就不用放入消息队列,直接响应,而MFC内部控制界面,如你的Invalidate();会PostMesage ,所以,你当前函数没退出,那就不能响应消息,于是,如果你在循环时
MSG msg;
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage (&msg);
DispatchMessage (&msg);}

那就可以从消息队列处理消息,那就不会阻塞程序正常运行,否则,如楼上所说,假死状态。
bhtzu
2013-05-03 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4305万
展开全部
//处理消息队列
ProcessMessage();

注释中已经说的很明白了。在大的或者耗时较长的循环处理中,程序会不响应消息队列,这时候,程序界面不会刷新,点击也没有反应(死机状),如果要避免这种情况,就需要在循环中适当(也许每次循环,也许几次循环处理一次)通过手动代码响应和处理消息队列,这就是它的功能和作用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轮接呢呢3
2015-10-26 · TA获得超过5450个赞
知道答主
回答量:2368
采纳率:93%
帮助的人:287万
展开全部
while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
//调用窗口对应的消息处理函数
TranslateMessage (&msg);
DispatchMessage (&msg);
}
而这个PeekMessage是从当前线程的消息队列获取消息。你程序中如果使用PostMessage则可以把消息放入消息队列,但是要等待上一条消息被处理完,如果使用SendMessage,就不用放入消息队列,直接响应,而MFC内部控制界面,如你的Invalidate();会PostMesage ,所以,你当前函数没退出,那就不能响应消息,于是,如果你在循环时
MSG msg;
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage (&msg);
DispatchMessage (&msg);}

那就可以从消息队列处理消息,那就不会阻塞程序正常运行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式