一个线程通讯的初级问题。

jun 2000-05-25 02:57:00
我在程序中开了一个线程,当它执行完毕后,我希望它向主线程发出一个执行完毕的
消息,如:WM_IAMFINISHED,现在程序中如何自定义这样一个消息?
...全文
190 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sniper 2000-05-25
  • 打赏
  • 举报
回复
请检查一下在TestDlg.h中DECLARE_MESSAGE_MAP()宏前有没有加上
afx_msg LRESULT OnFinished(WPARAM wparam, LPARAM lparam);
一句?
jun 2000-05-25
  • 打赏
  • 举报
回复
我还是有一点问题:
我在该对话框类中定义了一个函数用以响应WM_IAMFINISHED 消息,为:
LRESULT CTestDlg::OnFinished(WPARAM wparam, LPARAM lparam)
{
AfxMessageBox("A thread has finished");
return 0;
}

又增加了消息映射:
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
......
ON_MESSAGE (WM_IAMFINISHED,OnFinished )
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

在线程结束的地方发送消息:
UINT OnBeginThread(LPVOID pParam)
{
Sleep(10000);
::PostMessage((HWND) pParam,WM_IAMFINISHED,0,0);
return 0;
}
但是线程结束时,却没有弹出对话框,请问是什么原因?
royluo 2000-05-25
  • 打赏
  • 举报
回复
#define WM_IAMFINISHED WM_USER+0x123
:)
jun 2000-05-25
  • 打赏
  • 举报
回复
我就是不知道如何自定义一个消息,请再指点迷津,谢谢!
orochi 2000-05-25
  • 打赏
  • 举报
回复
首先你要自己定义一个消息,也就是你的WM_IAMFINISHED,然后在线程结束的时候取得主线程的指针,向它传递消息就可以了。用PostMessage().

15,471

社区成员

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

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