090909(星期三):学习MFC二

本文详细解析了Windows环境下进程和线程的生命周期,包括进程从启动到终止的各个阶段,以及线程如何创建和结束的过程。同时介绍了两种线程终结的方式及推荐使用的线程创建方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、一个进程的生命周期

1shell调用CreateProcess启动App.exe

2,系统产生一个进行核心对象(包括,semaphorefilefile-mappingprocessthread

3,系统为进程建立一个地址空间

4,装载代码、文件指针、dll到进程地址空间

5,系统为进程建立一个主线程

6,系统调用Starup code

7Starup code调用App程序的WinMain函数

8App程序开始执行,开始消息循环

9User关闭App主窗口,WinMain的消息循环结束,WinMain函数结束返回

10,回到Starup code

11,回到系统,系统呼叫ExitProcess结束进程

由此可见,所以的Windows程序都是shell的子进程。

 

 

二、Windows线程的生命周期

程序的功能通过线程来完成,进程产生时,主线程随之产生,每个Windows程序一开始就有一个thread,也可以CreateThread生成其他的thread,系统会做:

1,  配置thread对象,其handleCreateThread的返回值;

2,  设定计数器

3,  培训threadcontext

4,  保留tread的堆栈

5,  设定好context中堆栈的SSIP

 

Thread才是cpu分配时间的基本单位,context switch也是对threadcontext切换。

 

三、thread的终结

前两天在看过一些资料,恰好这边又有一些说明。

 

终结的两种方式:

1 寿终正寝,在thread函数结束前使用ExitThread做一些善后清理工作,不显式调用也是这一样的效果。

2 未得善终,强制使用TerminateThread,终结者,少用,API上有清楚的说明。

 

四、使用_beginThreadEX代替CreateThread

封装,并做一下记录工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值