第8 章 MFC的进程和线程 8.1 Win32 的进程和线程概念 进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。 线程是操作系统分时调度分配 CPU 时间的基本实体。一个线程可以执行程序的任意部分的代码,即使这部分代码被另一个线程并发地执行;一个进程的所有线程共享它的虚拟地址空间、全局变量和操作系统资源。 之所以有线程这个概念,是因为以线程而不是进程为调度对象效率更高: z 由于创建新进程必须加载代码,而线程要执行的代码已经被映射到进程的地址空间,所以创建、执行线程的速度比进程更快。 z 一个进程的所有线程共享进程的地址空间和全局变量,所以简化了线程之间的通讯。 8.2 Win32 的进程处理简介 因为 MFC 没有提供类处理进程,所以直接使用了Win32 API 函数。 8 .2 .1 进程的创建 调用 CreateProcess 函数创建新的进程,运行指定的程序。CreateProcess 的原型如下: BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ); 其中: lpApplicationName 指向包含了要运行模块名字的字符串。 lpCommandLine 指向命令行字符串。 lpProcessAttributes 描述进程的安全性属性,NT 下有用。 lpThreadAttributes 描述进程初始线程(主线程)的安全性属性,NT 下有用。 bInHeritHandles 表示子进程(被创建的进程)是否可以继承 父 进程的句 柄 。可以继承 的句 柄有线程句 柄 、有名或无 名管道、互 斥 对象、事 件、信 号 量、映像 文件、普 通文件和通讯端 口等;还 有一些 句 柄 不能 被继承 ,如内 存 句 柄 、DLL 实例 句 柄 、GDI 句 柄 、URER 句 柄 等等。 子进程继承 的句 柄 由父 进程通过 命令行方 式 或者 进程间通讯(IPC)方 式 由父 进程传 递 给 它。 dwCreationFlags 表示创建进程的优先级类别和进程的类型。创建进程的类型分控制台进程、调试...