四、进程

1. 进程 =  一个内核对象 +  一个地址空间

2. 进程的实际执行者是线程  cpu调度的也是线程。  进程是最有惰性的,进程从来不执行任何东西,它只是一个线程的容器。

3. hInstanceExe的实际值是一个内存基地址, 系统将可执行文件的映像加载到进程地址空间的这个位置。vs的基地址通常是0x00400000。 GetModuleHandle返回可执行文件或者dll文件映像加载到的基地址

4. 每个进程都有一个与它相关联的环境块,这是在地址空间内分配的一块内存

5. p85 进程的创建过程

      内核对象(使用计数) - -----        创建虚拟地址空间、加载  -- ----  创建新进程主线程的内核对象(使用计数) -- ----   入口函数

6. p94 根据dwFlags 判断其余成员是否有效

7. 使用计数 p98  createprocess 创建一个新进程,系统创建继承内核对象和线程内核对象,初始使用计数为1, 就在createprocess返回之前,系统会使用完全访问权限打开进程对象和线程对象,使用计数变为2,意味着:系统想要释放进程对象,进程必须终止(使用计数变为1),而且父进程必须调用closehandle(1减为0),线程类似。

存在的误解:closehandle即杀死进程或线程,这是错误的。只是告诉系统对进程或者线程的统计数据不再感兴趣

8. 进程的父子关系只存在子进程生成的一瞬间。

9. 进程终止, 进程中运行的其他任何线程都会终止。但是很多清理工作不能完成(析构函数,数据写回磁盘)

10. c/c++运行时会完成很多清理工作,所以最好不要用exitprocee等函数强制结束。 termanateprocess可以完全清理(异步)。为了确保进程终止,需要使用waitforsingleObject。

11. 进程间传递数据: 动态数据交换,ole,管道,邮槽, 内存,映射文件(最方便)


c/c++中,0可以转化为任意数据类型,所以在一些 数据结构作为参数的时候可以传入null?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值