在子线程中发送自定义消息接收不到,请各位大侠帮忙,谢谢

yangkunhenry 2018-10-08 04:50:39

主线程的相应函数中创建子线程

void CFotaManagerDlg::OnBnClickedOk()
{
.....
//Display(_T("nasri....."),FALSE);
h_thread = (HANDLE)_beginthreadex(NULL,0,ThreadProc,(void*)this,0,&threadID);

WaitForSingleObject(h_thread,INFINITE);

CloseHandle(h_thread);
}


线程处理函数中调用Display来sendmessage。
这里Display调用之后,可以跟踪调用到sendmessage了,但是一直没有跑到OnDisplayMsg消息响应函数
但是我在上面的响应函数创建线程之前调用Display就可以正常跑到OnDisplayMsg响应函数

unsigned __stdcall ThreadProc(void* pArguments)
{
CString dis_msg;
CFotaManagerDlg * pFMDlg = (CFotaManagerDlg*)pArguments;
if(pFMDlg == NULL)
{
AfxMessageBox(_T("pFMDlg is NULL!"));
return 1;
}

pFMDlg->Display(_T("Enter ThreadProc..."),0);
}


Display的具体实现

void CFotaManagerDlg::Display(CString msgstr, int display_style)
{
SendMessage(WM_DISPLAY_MSG,(WPARAM)display_style,(LPARAM)&msgstr);
}


自定义的消息处理函数OnDisplayMsg

afx_msg LRESULT CFotaManagerDlg::OnDisplayMsg(WPARAM wParam, LPARAM lParam)
{
//do something
}


自定义的消息以及映射,其声明我就不贴了

#define WM_DISPLAY_MSG WM_USER+1


BEGIN_MESSAGE_MAP(CFotaManagerDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, &CFotaManagerDlg::OnBnClickedOk)
ON_MESSAGE(WM_DISPLAY_MSG, &CFotaManagerDlg::OnDisplayMsg)
END_MESSAGE_MAP()
...全文
153 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangkunhenry 2018-10-09
  • 打赏
  • 举报
回复
引用 6 楼 cvbtvbwu 的回复:
[quote=引用 4 楼 yangkunhenry 的回复:]
[quote=引用 3 楼 schlafenhamster 的回复:]
worker thread 中 使用 while
不要 WaitForSingleObject 的

谢谢指点,想请教一下,为什么不能用WaitFor..?会导致无法接收消息吗?

另外我这边函数开了子线程之后,函数直接return了,这样没毛病吧?

谢谢[/quote]

主线程用WaitFor.会卡住主线程,那自然收不到消息,直接返回是没有问题的。[/quote]

谢谢
叶恭介叶恭介 2018-10-09
  • 打赏
  • 举报
回复
引用 4 楼 yangkunhenry 的回复:
[quote=引用 3 楼 schlafenhamster 的回复:]
worker thread 中 使用 while
不要 WaitForSingleObject 的

谢谢指点,想请教一下,为什么不能用WaitFor..?会导致无法接收消息吗?

另外我这边函数开了子线程之后,函数直接return了,这样没毛病吧?

谢谢[/quote]

主线程用WaitFor.会卡住主线程,那自然收不到消息,直接返回是没有问题的。
yangkunhenry 2018-10-08
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
worker thread 中 使用 while
不要 WaitForSingleObject 的

谢谢指点,想请教一下,为什么不能用WaitFor..?会导致无法接收消息吗?

另外我这边函数开了子线程之后,函数直接return了,这样没毛病吧?

谢谢
schlafenhamster 2018-10-08
  • 打赏
  • 举报
回复
worker thread 中 使用 while
不要 WaitForSingleObject 的
yangkunhenry 2018-10-08
  • 打赏
  • 举报
回复
难道是 WaitForSingleObject(h_thread,INFINITE); ?
schlafenhamster 2018-10-08
  • 打赏
  • 举报
回复
使用
AfxBeginThread(AFX_THREADPROC(MyThread),this);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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