1、定义向线程传递的参数类型,例如(可以根据自己的需要来定义):

struct t_DebugerThreadParam
{HWND m_hMainWnd;HWND m_hDebugerWnd;CString* m_pLastFileName;
};

2、创建线程,并向线程传递所需参数

//向线程传递的参数

struct t_DebugerThreadParam
{
HWND m_hMainWnd;
HWND m_hDebugerWnd;
CString* m_pLastFileName;
};

//创建线程并传递参数

t_DebugerThreadParam* pParam = new t_DebugerThreadParam();
pParam->m_hMainWnd = m_hMainWnd;
pParam->m_hDebugerWnd = this->m_hWnd;
pParam->m_pLastFileName = &m_strLastFilePath;

m_hDebugerThreadHandle = (HANDLE)_beginthreadex(NULL,0,&_DebugerThread,(LPVOID)pParam,0,&m_nThreadID);

3、定义并声明一个线程函数:

声明:

static unsigned __stdcall _DebugerThread(LPVOID param);

定义:

unsigned __stdcall CDebugerDlg::_DebugerThread(LPVOID param)
{
t_DebugerThreadParam* pData = (t_DebugerThreadParam*)param;

MSG msg;
CString* pFilePath = pData->m_pLastFileName;
while (CDebugerDlg::s_RunDebugerThread)
{
if(GetMessage(&msg,0,0,0))
{
int* pState = new int();
switch(msg.message)
{
case MSG_2_THREAD_DEBUG_MODEL://切换到debug模式
.....
break;

case MSG_2_THREAD_WORKING_MODEL:

::PostMessage(pData->m_hMainWnd,WM_DESTROY_DEBUGER,0,0);
return 0;

default:
break;

}
}

}

return 0;
}

其中红色部分为线程向窗口发送消息

4、为pData->m_hDebugerWnd窗口定义消息MSG_RES_DEBUG_THREAD及其响应函数_OnDestroyDebuger

在该窗口类的头文件中添加消息定义和消息响应函数的声明:

#define WM_DESTROY_DEBUGER WM_USER +6

afx_msg LRESULT _OnDestroyDebuger(WPARAM wParam,LPARAM lParam);

在该窗口类的cpp文件中添加消息与消息响应函数的映射:

BEGIN_MESSAGE_MAP(CAirMove_mainDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_MESSAGE(WM_ICON_NOTIFY,_OnIconNotify)ON_MESSAGE(WM_START_DEBUGER,_OnStartDebuger)ON_MESSAGE(WM_DESTROY_DEBUGER,_OnDestroyDebuger)//}}AFX_MSG_MAPON_WM_WINDOWPOSCHANGING()ON_WM_DESTROY()ON_WM_SHOWWINDOW()ON_COMMAND(WM_START_DEBUGER,OnStarDebugerMenu)ON_COMMAND(WM_HIDE_WORKING_WINDOW,OnHideWorkingMenu)ON_COMMAND(WM_DISPLAY_WORKING_WINDOW,OnDisplayWorkingMenu)
END_MESSAGE_MAP()

5、在该窗口类的cpp文件中添加消息响应函数的定义:

//销毁 Debuger
LRESULT CMainDlg::_OnDestroyDebuger(WPARAM wParam,LPARAM lParam)
{.........return  0;
}

MFC为窗口创建线程,以及线程与窗口间的通信相关推荐

  1. MFC多线程的创建,包括工作线程和用户界面线程

    MFC多线程的创建 1.MFC多线程简介 MFC对多线程进行了一层简单的封装,在Visual C++中每个线程都是从CWinThread类继承而来的.每一个应用程序的执行都有一个主线程,这个主线程也是 ...

  2. MFC中创建和使用线程的方法

    有关创建线程的问题有三种方法: 1.C语言函数,调用_beginthread(); 2.API函数,调用CreateThread(); 3.MFC函数,调用AfxBeginThread(); 推荐使用 ...

  3. 【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )

    文章目录 I 线程创建方法 II 线程执行函数 III 线程标识符 IV 线程属性 V 线程属性 1 ( 分离线程 | 非分离线程 ) VI 线程属性 2 ( 线程调度策略 ) VII 线程属性 3 ...

  4. pthread 立即停止线程_pthread线程的终止退出 | 线程的大量创建

    1. 线程只是从启动例程中返回,返回值是线程的退出码: 2. 线程调用了pthread_exit函数: 3. 线程可以被同一进程中的其他线程取消. ************************** ...

  5. VC++中多线程学习(MFC多线程)二(线程的相关操作、线程间的通信)

    上一篇笼统介绍了如何创建线程以及线程如何和类成员函数通信,本篇将主要介绍: 线程的相关操作 1.线程的挂起和恢复:SuspendThread.ResumeThread 在线程创建并运行后,用户可以对线 ...

  6. win32 c语言创建线程,【原创】win32线程及线程内核对象

    内核对象与GDI对象 GDI对象: 1. DC 2. 画笔 3. 画刷 内核对象 1. 进程 process 2. 线程 thread 3. 文件 file 4. 事件 envent 5. 信号量 s ...

  7. 易语言创建线程挂起线程恢复线程销毁线程

    线程创建CreateThread,线程挂起SuspendThread,线程恢复ResumeThread,线程销毁TerminateThread,都是kernel32的命令,我们自己封装这些线程的命令, ...

  8. java多线程创建方式以及线程安全

    什么是线程 线程被称为轻量级进程,是程序执行的最小单位,它是指在程序执行过程中,能够执行代码的一个执行单位.每个程序程序都至少有一个线程,也即是程序本身. 线程的状态 新建(New):创建后尚未启动的 ...

  9. java结束全部操作代码_Java创建与结束线程代码示例

    这篇文章主要介绍了Java创建与结束线程代码示例,小编觉得挺不错的,这里分享给大家,供需要的朋友参考. 本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程 ...

  10. 什么是Python线程?Python线程如何创建?

    相信正在学习Python技术或者对Python语言有一定了解的人对于Python线程应该都不陌生,但是也有刚接触Python的小伙伴对于Python线程并不了解,今天小编就跟大家聊聊什么是Python ...

最新文章

  1. Cesium调用 WMS 、WMTS 服务
  2. php 从根目录 开始创建,php创建多级目录的方法
  3. 授权码模式-获取令牌
  4. DDOS的攻击原理和防护指南
  5. php循环读取mysql_PHP无限循环获取MySQL数据
  6. C++类型萃取之type_traits和type_info
  7. 点工转自动化速成指南
  8. 人脸关键点标注工具_谈谈人脸关键点的江湖
  9. java用poi实现对word读取和修改操作
  10. 模板题——贪心(1)
  11. python遗传算法程序_python 如何实现遗传算法
  12. JDBC 常用的类和接口--一学就会(欢迎转载)
  13. Windows OCR推荐
  14. android 4.2 dropbox,android 下用脚本备份文档到dropbox的实现
  15. API_Day02_StringExcise
  16. 聚焦新生代 戮默科技创造正向价值
  17. 补淘宝单平台哪个便宜?如何补单才能增加权重?
  18. 利用java swing编写一个简易的计算器,实现了括号,优先级,三角函数,阶乘等功能
  19. python学习-Dya13-函数
  20. 关于SCI他引、自引、他引统计的小tip

热门文章

  1. 一个spark receiver 或多个spark receiver 接收 多个flume agent
  2. 对于scanf,strcpy等函数报4996错误的粗暴而简单解决办法
  3. libevent c++高并发网络编程_【多线程高并发编程】Callable源码分析
  4. 1.790E308java_java基础知识总结
  5. idea里边创建类的时候和方法自动生成注释
  6. python编程语言模块_Python基础编程常用模块汇总
  7. python 源码编译教程_python源码编译
  8. jxls向右循环为什么会间隔单元格_VBA中单元格的Offset属性,你是否能灵活的利用呢?...
  9. php mysql 一级分类_无限级分类 for PHP+Mysql
  10. hooks组件封装 react_react-hooks amp; context 编写可复用react组件的一种实践