Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • Windows
gaoliu
2021-10-06

线程消息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
编辑 (opens new window)
上次更新: 2021/10/11, 12:43:58
最近更新
01
通过模板实现结构体成员拷贝-按成员名匹配
05-07
02
c++17通过模板获取类成员的个数
05-01
03
avx-sse切换惩罚
04-30
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×