关于进程(一)

1、当Windows创建新进程时,它将使用该结构的有关成员。大多数应用程序将要求生成的应用程序仅仅使用默认值。至少应该将该结构中的所有成员初始化为零。如果未能将该结构的内容初始化为零,那么该结构的成员将包含调用线程的堆栈上的任何无用信息。在编程时,注意要将未用成员设置为零,这样,CreateProcess就能连贯一致地运行。(高级编译器会帮我们做这部分工作,底层编程时需要注意)。

 

2、创建新进程可使系统建立一个进程内核对象和一个线程内核对象。在创建进程的时候,系统为每个对象赋予一个初始使用计数值1。然后,在CreateProcess返回之前,该函数打开进程对象和线程对象,并将每个对象的与进程相关的句柄放入PROCESS_INFORMATION结构的hProcess和hThread成员中。当CreateProcess在内打开这些对象时,每个对象的使用计数就变为2。这意味着在系统能够释放进程之前,该进程必须终止运行(将使用计数递减为1),并且父进程必须调用CloseHandle(再将计数递减1,使之变为0)。同样,若要释放线程对象,该线程必须终止运行,父进程必须关闭线程对象的句柄。

 

3、必须关闭子进程和它的主线程句柄,以避免在应用程序运行时泄露资源。当然,当进程终止运行时,系统会自动消除这些泄露现象,但是,当进程不在需要访问子进程和它的线程时,编写的较好的软件能够显式关闭这些句柄(通过CloseHandle函数来关闭)。不能关闭这些句柄是开发人员最常犯的错误之一。

     关闭进程或线程的句柄,并不意味着会促使系统撤销该进程或者线程,只是告诉系统,你对进程或者线程的统计数据不感兴趣,进程或者线程将继续运行,知道它自己终止运行。

 

4、当进程内核对象创建后,系统赋予该对象一个独一无二的标识号。线程内核也是一样。

     系统会立即复用进程ID和线程ID。通过ID找到的进程可能是另外一个完全不同的进程,所以进程通信最好不要使用ID,应该定义一个持久性更好的机制,比如内核对象和窗口句柄等。

     若要确保进程ID或线程ID不被重复使用,唯一的方法时保证进程或者线程的内核对象不会被撤销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值