MFC中等待消息执行

wjf8882300 2013-05-27 10:22:35
最近封装一个控件,遇到一个难题,就是不知道如何等待消息返回。具体如下:

自定义了一个消息1501,这个消息里面执行某个操作MessageFunction。
有个方法function,这个方法提供给其他人调用的。这个方法判断isSignal标志,已表示消息1501是否执行完成。因为1501这个消息是由其他人触发的,所以我不知道什么MessageFunction才会执行。需要在function中循环判断isSignal标志是否改过了。而在function中使用循环判断会导致线程阻塞,消息MessageFunction压根儿不执行。

我的问题就是在function怎么判断MessageFunction已经执行过了?

ON_MESSAGE( 1501, MessageFunction )

bool isSignal = false;
HRESULT CXXXCtrl::MessageFunction(WPARAM wParam, LPARAM lParam)
{
isSignal = true;
}

HRESULT function()
{
if(isSignal)return S_OK;
}
...全文
608 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wshcdr 2013-08-16
  • 打赏
  • 举报
回复
那你实现个连接点啊, 别人做为某件事后,再通过连接点通知你
wjf8882300 2013-05-28
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
HRESULT function() { while(!isSignal) { Sleep(10); } return S_OK; }
这样的话当前线程会被阻塞,消息处理MessageFunction执行不了了。
引用 4 楼 VisualEleven 的回复:
可以用Event,开个线程WaitForSingleObject(EVENT, INFINITE);等待这个EVENT,在消息响应函数中MessageFunction来SetEvent
在function中开线程?那样的话开完线程function就执行完返回了。在function中使用WaitForSingleObject也会导致线程被阻塞,消息执行不了。
Eleven 2013-05-28
  • 打赏
  • 举报
回复
可以用Event,开个线程WaitForSingleObject(EVENT, INFINITE);等待这个EVENT,在消息响应函数中MessageFunction来SetEvent
oyljerry 2013-05-28
  • 打赏
  • 举报
回复
HRESULT function() { while(!isSignal) { Sleep(10); } return S_OK; }
wjf8882300 2013-05-27
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
function开线程来判断isSignal
怎么开?线程开了直接走下去了,我必须等待MessageFunction执行完或者超时才能返回呢。
oyljerry 2013-05-27
  • 打赏
  • 举报
回复
function开线程来判断isSignal

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧