没有合适的资源?快使用搜索试试~ 我知道了~
《对话框》之《MFC的进程和线程》
5星 · 超过95%的资源 需积分: 4 21 下载量 179 浏览量
2008-10-17
16:13:28
上传
评论
收藏 134KB DOC 举报
温馨提示
试读
13页
1. Win32的进程和线程概念 进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。
资源推荐
资源详情
资源评论
8. MFC 的进程和线程
1. Win32 的进程和线程概念
进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文
件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线
程,其中一个是主线程。
线程是操作系统分时调度分配 CPU 时间的基本实体。一个线程可以执行程序的任意部分的代码,即使
这部分代码被另一个线程并发地执行;一个进程的所有线程共享它的虚拟地址空间、全局变量和操作
系统资源。
之所以有线程这个概念,是因为以线程而不是进程为调度对象效率更高:
由于创建新进程必须加载代码,而线程要执行的代码已经被映射到进程的地址空间,所以创建、
执行线程的速度比进程更快。
一个进程的所有线程共享进程的地址空间和全局变量,所以简化了线程之间的通讯。
1. Win32 的进程处理简介
因为 MFC 没有提供类处理进程,所以直接使用了 Win32 API 函数。
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 表示创建进程的优先级类别和进程的类型。创建进程的类型分
控制台进程、调试进程等;优先级类别用来控制进程的优先级别,分
Idle、Normal、High、Real_time 四个类别。
lpEnviroment 指向环境变量块,环境变量可以被子进程继承。
lpCurrentDirectory 指向表示当前目录的字符串,当前目录可以继承。
lpStartupInfo 指向 StartupInfo 结构,控制进程的主窗口的出现方式。
lpProcessInformation 指向 PROCESS_INFORMATION 结构,用来存储返回的
进程信息。
从其参数可以看出创建一个新的进程需要指定什么信息。
从上面的解释可以看出,一个进程包含了很多信息。若进程创建成功的话,返回
一个进程信息结构类型的指针。进程信息结构如下:
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
}PROCESS_INFORMATION;
进程信息结构包括进程句柄,主线程句柄,进程 ID,主线程 ID。
2. 进程的终止
进程在以下情况下终止:
调用 ExitProcess 结束进程;
进程的主线程返回,隐含地调用 ExitProcess 导致进程结束;
进程的最后一个线程终止;
调用 TerminateProcess 终止进程。
当要结束一个 GDI 进程时,发送 WM_QUIT 消息给主窗口,当然也可以从它的任一线程调用
ExitProcess。
1. Win32 的线程
1. 线程的创建
使用 CreateThread 函数创建线程,CreateThread 的原型如下:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags, // creation =ags
LPDWORD lpThreadId
);
其中:
lpThreadAttributes 表示创建线程的安全属性,NT 下有用。
dwStackSize 指定线程栈的尺寸,如果为 0 则与进程主线程栈相同。
lpStartAddress 指定线程开始运行的地址。
lpParameter 表示传递给线程的 32 位的参数。
dwCreateFlages 表示是否创建后挂起线程(取值 CREATE_SUSPEND),挂起后调用
ResumeThread 继续执行。
lpThreadId 用来存放返回的线程 ID。
线程的优先级别
进程的每个优先级类包含了五个线程的优先级水平。在进程的优先级类确定之后,可以改变线程的优
先级水平。用 SetPriorityClass 设置进程优先级类,用 SetThreadPriority 设置线程优先级水平。
Normal 级的线程可以被除了 Idle 级以外的任意线程抢占。
1. 线程的终止
剩余12页未读,继续阅读
资源评论
- zhuanghuamei2014-12-19有一定的作用,使用使用。。。
- xiaowangdu2012-12-26很好 对我有用
valley_rain_wcy
- 粉丝: 2
- 资源: 43
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功