线程消息PostThreadMessage和ONTHREADMESSAGE
1、创建一个线程类CMyThread:类向导,添加类,基类为CWinThread,名字CMyThread。
在stdafx.h中定义一个宏,用以区分不同的消息,如:
#define MY_THREAD_MSG 50
#define MY_THREAD_MSG2 51
2、在某个button中创建一个该线程的实例
void CmyAppDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CWinThread *pUIThread1;
pUIThread1=AfxBeginThread(RUNTIME_CLASS(CmyThread));//这里取得该线程的句柄pUIThread1
if (pUIThread1 == NULL)
{
MessageBox(_T("用户界面线程启动失败!"));
return;
}
Sleep(3000);
pUIThread1->PostThreadMessage(MY_THREAD_MSG,6,1);//发送消息至该线程,pUIThread1是该线程的句柄,则这消息发往该线程,WM_MYTHREAD
Sleep(5000);
pUIThread1->PostThreadMessage(MY_THREAD_MSG2,6,2);//这个消息由OnThreadMsg2()处理,上一个消息由OnThreadMsg()处理
}
对于PostThreadMessage()函数,如果知道线程的句柄,假设是pUIThread1,则发送消息至该线程时 :
pUIThread1->PostThreadMessage(WM_MYTHREAD,6,1);
也可以通过该线程的ID向其发送消息,其ID可以根据句柄得到:pUIThread1->m_nThreadID。发送消息语句:
PostThreadMessage(pUIThread1->m_nThreadID,WM_MYTHREAD,6,1);
3、在CMyThread线程类中添加消息处理:在消息map中添加
BEGIN_MESSAGE_MAP(CMyThread, CWinThread)
ON_THREAD_MESSAGE(MY_THREAD_MSG, &CmyThread::OnThreadMsg)
ON_THREAD_MESSAGE(MY_THREAD_MSG2, &CmyThread::OnThreadMsg2)
END_MESSAGE_MAP()
在CMyThread类中定义OnThreadMsg(WPARAM wParam,LPARAM lParam)和OnThreadMsg2(WPARAM wParam,LPARAM lParam)两个处理函数
可参考:
http://zhidao.baidu.com/link?url=JqnLndBPwgpXYpBsTE9ZT7gpuzHJ7sxBeG8iFIvUZtoRZWKva5z5KecNES0sR59gXBlxN7l8ViXxPBCCKgux1_
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
编辑 (opens new window)
上次更新: 2021/10/11, 12:43:58