当前位置:文档之家› Windows编程基础VS2010开发环境第08章 多线程

Windows编程基础VS2010开发环境第08章 多线程


8.2.5 线程的终止
当一个线程终止时,系统要进行如下操作: (1)关闭该线程所属的所有对象句柄。 (2)将该线程对象状态变成有信号状态。 (3)该线程对象终止状态从STILL_ACTIVE改成相应的退出码。 (4)若线程为进程最后一个活动线程,它的终止表示整个进程的结 束。
工作者线程:工作者线程通常用于进行程序的后台任务, 如计算、打印等工作,它和用户界面线程不同,它不用从 CWinThread类派生来创建,最重要的是实现完成工作者
线程任务的运行控制函数。
8.2 线程的启动和终止
创建用户界面线程 启动用户界面线程 使用用户界面窗口 启动工作者线程 线程的终止 等待函数
8.1.2 多线程分类
VS2010支持两种类型线程: 用户界面线程和工作者线程。
8.1.2 多线程分类
用户界面线程:用户界面线程常用于处理用户输入,并响 应各种事件和消息。其实,应用程序的主执行线程就是 CWinThread派生类CWinApp的对象,它就是一个用户界 面线程。
8.1.2 多线程分类
int nPriority=THREAD_PRIORITY_NORMAL, UINT nStackSize=0, DWORD dwCreateFlags=0, LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL) pThreadClass:是CWinThread派生类的CRuntimeClass指 nPriority:是用来设置线程优先级,缺省THREAD_PRIORITY_NORMAL nStackSize: 指定线程堆栈大小,缺省值0表示与创建线程时的堆栈大小一样 lpSecurityAttrs:用于指定安全属性。
8.2.1创建用户界面线程
类的声明如下: class MyThread:public CWinThread { DECLARE_DYNCREATE(MyThread) // 声明类成员函数和变量 DECLEAR_MESSAGE_MAP() };
8.2.1创建用户界面线程
(2)这个CWinThread派生类必须重载一些成员函数, 表8-1 用户界面线程需要重载的成员函数
8.2.1创建用户界面线程
按照以下步骤创建一个用户界面线程: (1)从CWinThread派生一个类。
必须使用DECLARE_DYNCREATE和 IMPLEMENT_DYNCREATE声明和实现CWinThread 派生类。例如: IMPLEMENT_DYNCREATE(MyThread,
CWinThread)
第08章
线程与程序执行效率
本章主要内容
8.1 多线程概述 8.2 线程的启动和终止 8.3 线程同步与通信 8.4 用户界面线程应用 8.5 工作者线程的应用
8.1.1 多线程概念
多线程的概念
进程是应用程序的执行实例,每个进程是由私有的虚拟 地址空间、代码、数据和其他各种系统资源组成,进程 在运行过程中创建的资源随着进程的终止而被销毁,所 使用的系统资源在进程终止时,被释放或关闭。
8.2.4 启动工作者线程
启动工作者线程也是调用AfxBeginThread函数 CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc,
LPVOID pParam, int nPriority=THREAD_PRIORITY_NORMAL, UINT nStackSize=0, DWORD dwCreateFlags=0, LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL); 参数pfnThreadProc是工作者线程控制函数指针,这个参数不能是NULL, pParam是传递给控制函数的参数,其它参数的含义与创建用户界面线程的 参数相同。
循环
表8-1
要求 一般需要重载
必须重载 一般不重载 一般不重载 一般不重载
很少重载
8.2.2 启动用户界面线程
调用AfxBeginThread函数来启动用户界面线程。 AfxBeginThread函数有两个版本:启动用户界面线 程和工作者线程。
8.2.2 启动用户界面线程
启动用户界面线程版本: CWinThread* AfxBeginThread(CRruntimeClass* pThreadClass,
8.2.1创建用户界面线程
函数名 ExitInstance
InitInstance OnIdle
PreTranslateMessage
函数说明 在线程终止时执行清理
工作
线程初始化 执行线程空闲处理 消息分拣和过滤处理
ProcessWndProcExceptio 响应该线程中未处理的
n
异常
Run
线程控制函数包括消息
线程与进程的关系
每一个进程至少有一个线程(即主执行线程,它无需 由用户去主动创建,是由应用程序启动后系统自动创建 的),用户根据需要在应用程序中创建其它线程,多个线 程并发地运行于同一个进程中。
MFC类库中的多线程类
MFC类库中对多线程操作提供支持的类包括:
CWinThread CSyncObject CCriticalSection CSemaphore CMute CEvent CSingleLock CMultiLock
8.1.1 多线程概念
线程是进程内部的一个执行单元(可以是一个函数、一 个活跃的类对象),系统创建好进程后,实际上就启动 执行了该进程的主线程,主执行线程是以函数形式出现 的,比如说main或WinMain函数,将程序的启动点提 供给Window系统。当主执行线程终止时,进程也就随 之终止了。
线程基类 同步对象基类 临界区类 信号量 互斥类 事
MFC应用程序都有一个CWinApp的派生类, CWinApp类就是CWinThread类的派生类,它的对象就是 启动应用程序时,系统创建的主执行线程。另外,在 VS2010中,也支持线程的Windows SDK函数,这些 Windows SDK函数对于编写多线程程序也带来了便利。
相关主题