`
baiguomeng
  • 浏览: 998114 次
文章分类
社区版块
存档分类
最新评论

深度解析MFC线程及机制

 
阅读更多

在VC中,启动一线程有3种方式:

1.使用MFC中启动一个线程一般使用AfxBeginThread函数;

2.使用API则使用CreateThread;

3.就是使用_beginthread和_beginthreadex两个函数。

使用MFC的AfxBeginThread函数启动一个线程,不管你代入的参数是否是个从CWinThread继承来的线程类还是一以标准的线程函数地址及参数(UINT ThreadProc(LPVOID pParam)的形式),都返回了一CWinThread指针方便了我们使用。但其中的机理没有在哪本书上有人仔细分析过,没办法只好查看MFC源码了。经过分析,现将分析的结果与大家分享。:)

在CWinThread类中有两个构造函数:

一为默认的构造,还有一个为一标准线程函数地址和输入参数的构造函数-
CWinThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam)。当我们使用AfxBeginThread启动一个线程时,无外2种方法:
1.直接启动已CWinThread为基类的线程类-AfxBeginThread(RUNTIME_CLASS(...),...);
2.直接启动标准的线程函数-AfxBeginThread((AFX_THREADPROC),LPVOID ,....);

还有一种方法可能大家不常用,就是以CWinThread继承一线程类,在内存中new,然后调用CWinThread的成员函数CreateThread来启动自身;
经过我的分析,实际上第1种和第2种方法就是第3中方法的详细化,调用更加灵活,但1、2种比起来要方便些。:)
实际上AfxBeginThread根据参数实现创建一CWinThread线程:若参数为一标准的线程函数地址,则new一CWinThread对象,以函数地址及参数构造;若参数为一CWinThread继承过来的类则直接调用CRunTimeClass的CreateObject创建一CWinThread对象,以默认参数构造。然后调用CreateThread成员函数,调用不成功便调用Delete(),判断是否设置了自我删除对象(m_bAutoDelete = TRUE),为真则删除自身。

在CreateThread函数中,首先创建2个事件,MFC利用_beginthreadex启动一名为_AfxThreadEntry的全局线程函数,并通过一_AFX_THREAD_STARTUP结构体将一系列参数传入,然后等待_AfxThreadEntry将一线程初始化完毕设置事件1状态为止,然后自己设置另一个事件2状态,触发_AfxThreadEntry中的代码;在_AfxThreadEntry中,函数首先通过一系列函数初始化线程,再设置事件1状态后等待CWinThread的CreateThread执行完毕后的事件2,这时判断_AFX_THREAD_STARTUP中的线程函数地址是否为空,若不为空就直接执行函数代码;若不为空就执行CWinThread的InitInstance判断是否返回为TRUE,是的话就进入消息循环知道发送给线程WM_QUIT消息为止;若返回为FALSE,就调用ExitInstance;最后都调用AfxEndThread结束线程。而AfxEndThread则从模块中先取得CWinThread*类型的指针判断是否为NULL,否的话则调用CWinThread的Delete来将CWinThread从内存中删除。

以下是简易流程图:

AfxBeginThread:

AfxBeginThread流程

AfxBeginThread流程

_AfxThreadEntry流程

_AfxThreadEntry流程

希望对大家有用!

分享到:
评论

相关推荐

    深度解析MFC线程及机制.doc

    ### 深度解析MFC线程及机制 #### 一、引言 在现代软件开发中,多线程编程已成为提升程序性能的关键技术之一。Microsoft Foundation Classes (MFC) 是一套广泛应用于Windows应用程序开发的类库,它不仅简化了...

    vc++ MFC 使用教程

    《VC++ MFC 使用教程》是一本针对Visual C++中MFC类库的深度解析教程。MFC(Microsoft Foundation Classes)是微软为Windows平台提供的一个C++类库,它极大地简化了Windows应用程序的开发,利用C++的面向对象特性...

    MFC mfckongjian

    ### MFC (Microsoft Foundation Classes) 深度解析 #### MFC 概述与核心价值 MFC(Microsoft Foundation Classes)是由微软开发的一个基于 C++ 的 Windows 编程框架,旨在简化 Windows 应用程序的开发流程。相较于...

    《深入浅出MFC》简体中文pdf版

    《深入浅出MFC》是一本专为C++开发者设计的书籍,主要聚焦于Microsoft Foundation Classes(MFC)框架的深度解析。MFC是微软公司为Windows操作系统开发的一个类库,它封装了大量的Win32 API,使得开发者可以更加便捷...

    MFC 音乐播放器

    《MFC音乐播放器:深度解析与应用》 在当今数字化时代,音乐播放器作为音频内容的主要呈现平台,已经成为我们日常生活中不可或缺的一部分。MFC(Microsoft Foundation Classes)音乐播放器,便是利用MFC库开发的一...

    MFC多功能时钟源码

    本篇文章将深度剖析“MFC多功能时钟源码”,帮助读者理解和学习MFC技术,并了解如何利用MFC实现一个功能丰富的时钟程序。 一、MFC框架解析 1. **框架结构**:MFC遵循模型-视图-控制器(MVC)设计模式,其中,模型...

    MFC.rar_MFC_mfc游戏

    《MFC在游戏编程中的应用深度解析》 MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于构建Windows应用程序。它基于面向对象的设计原则,为开发者提供了丰富的功能,包括窗口管理、消息处理、图形...

    新编WINAPI大全及MFC的函数说明

    《新编WINAPI大全及MFC的函数说明》是一份深度解析Windows API和MFC库的资源,旨在帮助开发者深入理解这两个关键领域的功能与用法。这份资料以HTML格式呈现,详细而全面,但需要读者有足够的时间和耐心去研读。 ...

    MFC网络五子棋源码

    6. **消息处理**:MFC通过消息机制来响应用户操作和系统事件。源码中会定义消息映射表(message map),并实现相应的消息处理函数,以处理各种点击、键盘输入等事件。 7. **聊天功能**:源码中还包括了聊天功能,这...

    深入浅出MFC

    9. **高级主题**:除了基础内容外,本书还会探讨一些高级话题,如多线程编程、国际化和本地化、异常处理、调试技巧等,帮助读者提升MFC编程的深度和广度。 通过阅读《深入浅出MFC》,读者不仅可以掌握MFC的基本用法...

    MFC简体-经典呕心沥血版

    这本书以其详尽的解析和丰富的实践案例,揭示了MFC框架的内在机制和工作原理,是学习和提升MFC技能的重要参考资料。 在MFC中,核心概念包括应用程序框架、文档/视图架构、消息映射、控件和对话框、以及ActiveX支持...

    MFC深入浅出(完整版)

    《MFC深入浅出》是一本深度探讨Microsoft Foundation Classes (MFC)的书籍,它以其详尽的解析和深入的理论赢得了读者的高度评价。MFC是微软为Windows平台开发的应用程序提供的一种C++类库,它封装了Windows API,...

    MFC Internals 英文

    总的来说,《MFC Internals》是一本深度揭秘MFC的权威指南,适合有一定MFC基础并希望进一步提升的开发者阅读。通过学习书中的内容,读者可以更好地理解MFC的工作原理,提高代码质量,解决实际开发中遇到的问题,从而...

    [软件工程师典藏:MFC 程序开发参考大全].宋坤.课本光盘资料代码

    2. 应用程序框架:深入解析MFC应用程序框架,如CWinApp、CWinThread等,以及如何创建和管理应用程序实例。 3. 窗口与视图:讲解窗口类(CWnd)及其派生类,如对话框类(CDialog)、视图类(CView)的使用,以及...

    精通MFC程序设计

    《精通MFC程序设计》是姚领田先生撰写的一本深度解析MFC(Microsoft Foundation Classes)框架的专著。MFC是微软公司为Windows应用程序开发提供的一种C++类库,它封装了Windows API,使得开发者可以更加高效地构建...

    VC-MFCVC-MFC

    ### 深入解析VC-MFC:从理论到实践 #### MFC——Windows下的编程利器 在探讨VC-MFC之前,我们先明确一下MFC是什么。MFC,即Microsoft Foundation Classes,是微软提供的一个用于Windows应用程序开发的C++类库。它...

    候杰的MFC深入浅出

    《候杰的MFC深入浅出》是一本深入解析Microsoft Foundation Classes (MFC) 的经典著作,对于想要深入了解MFC的开发者来说具有极高的参考价值。MFC是微软为Windows平台开发的应用程序提供的一种C++类库,它封装了...

    MFC深入浅出

    总的来说,李久进和候杰的这两本书都是深入学习MFC的重要资源,它们分别从不同角度和深度解析了MFC的使用,无论你是初学者还是有经验的开发者,都能从中受益。通过阅读这两本书,你可以系统地学习MFC的基本概念、...

    深入浅出win32多线程编程

    【深入浅出Win32多线程编程】深入解析了在Windows操作系统环境下如何进行多线程编程。在现代操作系统中,多线程是实现并发执行和高效资源利用的关键技术。Win32 API提供了丰富的功能来支持多线程的创建、管理和通信...

    深入浅出MFC.rar

    《深入浅出MFC》是一本专注于Microsoft Foundation Classes (MFC) 库的深度解析书籍。MFC 是微软为Windows应用程序开发提供的一套C++类库,它将Windows API进行了封装,使得开发者能够使用面向对象的方式来构建...

Global site tag (gtag.js) - Google Analytics