一、一个进程的生命周期
1,shell调用CreateProcess启动App.exe
2,系统产生一个进行核心对象(包括,semaphore,file,file-mapping,process,thread)
3,系统为进程建立一个地址空间
4,装载代码、文件指针、dll到进程地址空间
5,系统为进程建立一个主线程
6,系统调用Starup code
7,Starup code调用App程序的WinMain函数
8,App程序开始执行,开始消息循环…
9,User关闭App主窗口,WinMain的消息循环结束,WinMain函数结束返回
10,回到Starup code
11,回到系统,系统呼叫ExitProcess结束进程
由此可见,所以的Windows程序都是shell的子进程。
二、Windows线程的生命周期
程序的功能通过线程来完成,进程产生时,主线程随之产生,每个Windows程序一开始就有一个thread,也可以CreateThread生成其他的thread,系统会做:
1, 配置thread对象,其handle是CreateThread的返回值;
2, 设定计数器
3, 培训thread的context
4, 保留tread的堆栈
5, 设定好context中堆栈的SS和IP
Thread才是cpu分配时间的基本单位,context switch也是对thread的context切换。
三、thread的终结
前两天在看过一些资料,恰好这边又有一些说明。
终结的两种方式:
1 寿终正寝,在thread函数结束前使用ExitThread做一些善后清理工作,不显式调用也是这一样的效果。
2 未得善终,强制使用TerminateThread,终结者,少用,API上有清楚的说明。
四、使用_beginThreadEX代替CreateThread
封装,并做一下记录工作。