SendMessageCallback的困惑???

kaxiou kaxiou 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在《windows高级编程指南》中说道SendMessageCallback()在发送后就立即返回。但是我在堵塞测试的时候发现,调用SendMessageCallback
的线程也死掉了,
下面是我的代码
大概就是在用SendMessageCallback发送消息给对话框之前,创建一个Event,设置为无信号,然后在
对话框的消息响应中等待Event变为有信号才继续执行,根据书上所说,SendMessageCallback()在发送会就返回,
那么发送消息的线程就应该不会因为对话框在处理消息时候因为等待Event而给堵塞住,这样发送线程就可以继续执行下面的SetEvent,
这样对话框WaitForSingleObject()得以返回,这样它也可以得以继续执行
。
void CMainFrame::OnOpendialog()
{
//该函数创建一个无模式对话框

CWorkingDialog* pdlg=new CWorkingDialog;
ASSERT_VALID(pdlg);
//Create the modeless dialog . represents this dialog.
BOOL bResult = pdlg->Create(IDD_DIALOG1);

CString strMsg="From MainFrame";
HANDLE hEvent=CreateEvent(NULL,TRUE,FALSE,"wait");//创建事件通知 ,手动,无信号

SendMessageCallback(pdlg->GetSafeHwnd(),WM_MSG,(WPARAM)(LPCTSTR)strMsg,0,FunCallback,0);

strMsg="Yes";
SetEvent(hEvent);
}

//响应wm_msg
void CWorkingDialog::OnTestMsg(WPARAM wParam ,LPARAM lParam)
{
HANDLE hEvent = CreateEvent(NULL,TRUE,FALSE,"wait");
ASSERT(GetLastError()==ERROR_ALREADY_EXISTS);
CString str((LPCTSTR)wParam);

WaitForSingleObject(hEvent,INFINITE);//等到有信号才执行下面的代码

MessageBox(str);
}

但是这段代码运行结果跟我上面的猜想不一致,是不是我对SendMessageCallback的“发送就返回”理解错误?
还请指点。谢谢
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
kaxiou
进程/线程/DLL 15,466 成员 49,169 内容