为啥说线程对象的默认(初始)句柄数为2 ?
谁能解释一下。
谁能解释一下。
解决方案 »
- VS2005 DLL调试断点失效问题
- 插件式框架设计问题
- toolbar中的各个button的图标的大小不同?
- 请问大家一下:在屏幕上输出一个半径为:50蓝色的,圆心坐标为:(100,100)?怎么在visual c++上编写程序的呢??谢谢!
- 最小化问题,晕中。。
- 关于析构函数的一个问题
- 多文档问题求助:如何知道程序上次打开了那些文件?
- 如何能学好C/C++呢,高手推荐好书和好的方法
- 关于队列的问题~
- delphi、vc、c++ builder三者,哪一种是你的最终选择,why?
- 拒绝访问。Error executing c:\winnt\system32\cmd.exe.
- 如何在CEdit框中实现类似IE的下拉提示??
如果你在创建线程时
不传递create_suspend
系统进行初始化后
便会将记数减1而不是你传递create_suspend后
系统将记数加1
在创建一个线程后,因为有了线程,所以这个内核对象的引用计数器为1,使用计数器也为一,又因为用CreateThread()返回了一个句柄,所以引用计数器加1,使用计数器加2。
当一个线程被创建时,创建它的父线程拥有这个句柄,线程本身也拥有这个句柄,所以应该是2
引用计数器是指所有引用此内核对象的次数;
使用计数器是指此内核对象的句柄使用计数器加上内核对象引用计数器。内核对象由对象管理器进行管理,它要进行管理,必须知道对象在做什么,它也知道对象在做什么。
比如线程内核对象,要创建描述此线程的一个内核对象,这时,它把引用计数器设置为1,然后当CreateThread()返回的时候创建了一个句柄对象,所在这时引用计数器又加1等于2,而这时句柄计数器也加上1,所有使用计数器就等于3。
当然,对象管理器在管理对象的时候,有一个字段叫引用计数器,另一个字段叫句柄使用计数器,当我们打开得到一个内核句柄的时候,句柄使用计数器加上1,引用计数器也加1,上边说的使用计数器是本人加的,对象管理器里面只有引用计数器和句柄使用计数器字段。