2009-10-7
=======================
《深入解析MFC》笔记 12. 进程与线程
=======================
核心对象
核心对象 产生方法
event CreateEvent
mutex CreateMutex
semaphore CreateSemaphore
file CreateFile
file-mapping CreateFileMapping
process CreateProcess
thread CreateThread
进程的生命周期: 《深入浅出MFC》P39
1、shell调用 CreateProcess 激活 App.exe
2、系统产生一个进程核心对象,计数值为1.
3、系统在此进程建立一个4GB地址空间。
4、加载器将必要的代码加载到上述地址空间中,包括App.exe的程序、数据,以及所需的动态链接函数库(DLLs)。
5、系统为此进程建立一个线程,成为主线程,现成才是CPU时间的分配对象。
6、系统调用 C runtime 函数库的 Startup code。
7、startup code 调用 App程序的 WinMain函数。
8、App开始运行。
9、使用者关闭App主窗口,是WinMain消息循环结束,WinMain结束
10、回到Startup code。
11、回到系统,系统调用 ExitProcess结束进程
产生子进程:
CreateProcess(
LPCSTR lpApplicationName, //指定可执行文件名
LPSTR lpCommandLine, //指定欲传给新进程的命令行参数
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles, //指定3、4的安全属性是否需要被继承
DWORD dwCreationFlags, //标识组合
LPVOID lpEnvironment, //指定进程所使用的环境变量区,Null或父进程环境变量
LPCSTR lpCurrentDirectory, //设定子进程的工作目录与工作驱动器,若为NULL,继承父进程
LPSTARTUPINFO lpStartupInfo, //指向一个 STARTUPINFO结构的指针,
LPPROCESS_INFORMATION lpProcessInformation
);
线程的生命周期: 《深入浅出MFC》P41
调用CreateThread产生额外的线程时,系统完成以下工作
1、配置“线程对象”,其handle将成为 CreateThread 的返回值
2、设定计数器为 1.
3、配置线程 context。
4、保留线程的堆栈。
5、将 context 中的堆栈指针缓存器(SS)和指令指针缓存器(IP)设定妥当。
CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, //安全属性的设定及继承
DWORD dwStackSize, //堆栈大小
LPTHREAD_START_ROUTINE lpStartAddress, //设定“线程函数”的名称
LPVOID lpParameter,
DWORD dwCreationFlags, //为0,则线程立即开始执行。
LPDWORD lpThreadId //纺织线程的ID
);
unsigned long _beginthreadex ( 《深入浅出MFC》P42
void* security,
unsigned stack_size,
unsigned (__stdcall *start_address) (void *),
void *arglist,
unsigned initflag,
unsigned* thrdaddr
);
posted on 2010-03-15 23:29
Euan 阅读(888)
评论(0) 编辑 收藏 引用 所属分类:
windows