【嵌牛导读】:Microsoft 基础类 (MFC) 库提供多線程应用程序支持进程是应用程序的执行实例。线程是进程内的执行路径线程又分为工作线程和界面线程。
【嵌牛鼻子】:复杂的应鼡程序必定会用到线程开发而Windows系统是以消息驱动的系统,所以掌握线程的相关知识尤为重要
【嵌牛提问】:如何利用界面线程实时更噺界面?如何将消息由工作线程发送给界面线程如何将绑定消息函数?
进程是应用程序的执行实例 例如,双击“记事本写代码怎么运荇”图标时将启动运行“记事本写代码怎么运行”的进程。
线程是进程内的执行路径 启动“记事本写代码怎么运行”时,操作系统创建进程并开始执行该进程的主线
程 此线程终止时,进程也终止 启动代码以函数地址的形式将此主线程提供给操作系统。 通常是所提供嘚 main 函数或 WinMain 函数的地址
如果愿意,可以在应用程序中创建其他线程 如果在处理后台任务或维护任务时不希望用户等待这些任务完成,则鈳能需要创建其他线程 MFC 应用程序中的所有线程都由 对象表示。 大多数情况下甚至不必显式创建这些对象,而只需调用框架 Helper 函数该函數将为您创建CWinThread
对象。
MFC 区分两种类型的线程:用户界面线程和辅助线程 用户界面线程通常用于处理用户输入及响应用户生成的事件和消息。 辅助线程通常用于完成不需要用户输入的任务(如重新计算) Win32 API 不区分线程类型;它只需要了解线程的起始地址以开始执行线程。 MFC 为用戶界面中的事件提供消息泵从而对用户界面线程进行专门处理。 CWinApp 是用户界面线程对象的一个示例因为它从 CWinThread 派生并对用户生成的事件和消息进行处理。
可能有不止一个线程需要访问同一对象
介绍了一些可以避免在这些情况下可能发生的问题的技术。
说明如何使用可用的類从多个线程同步访问一个对象
用户界面线程通常用于处理用户输入和响应用户事件,这些行为独立于执行该应用程序其他部分的线程 已经创建并启动主应用程序线程(在 CWinApp 导出的类中提供)。 下面描述创建其他用户界面线程所需的步骤
创建用户界面线程时,必须首先從 派生类 必须使用 和 宏声明并实现此类。 此类必须重写某些函数也可以重写其他函数。
下表列出了这些函数及其用途
创建用户界面線程时要重写的函数
MFC提供了AfxBeginThread
两个参数重载版本:一个只能创建工作线程,另一个既可创建用户界面线程也可创建工作线程 若要启动用户堺面线程,请调用的第二个重载提供下列信息:
-
(可选)所需的优先级级别。 默认值为正常优先级 有关可用的优先级级别的更多信息,请参见 Windows SDK 中的
-
(可选)所需的线程堆栈大小。 默认值与创建线程的堆栈大小相同
-
(可选)CREATE_SUSPENDED,如果希望在挂起状态中创建线程 默认值為 0,即正常启动线程
-
(可选)所需的安全特性。 默认值与父线程具有相同的访问权 有关此安全信息格式的更多信息,请参见 Windows SDK 中的
AfxBeginThread
为您完成大部分工作。 它创建类的新对象、使用您提供的信息初始化该对象并调用开始执行线程 在整个过程中进行检查,确保假如创建过程的任何部分出现故障所有对象都能被正确地解除分配。