解决方案 »
- 通过句柄关闭窗口的问题
- 静态链接 DllGetClassObject 编译时链接错误
- 关于vc用ShellExecute调用Winrar的问题
- 环境测试工具设计,如何获得本地网络利用率,如何占用本地带宽?
- 用sendmessage()发送数据,第一次成功,以后都失败,为什么?
- ADO 在记录集中定位纪录的两个问题。
- 怎样删除类的实例?
- ActiveX如何调用引用该ActiveX的网页中的JavaScript函数
- 有谁可以提供一个vc的绘图程序??(高分相送)
- WinSocket发送消息时能传递非字符数据吗?
- Windows8 触屏软件 还能用MFC吗
- 有没有办法让电脑在无外接音箱等发声设备的情况下发声?
CloseHandle是减少引用计数,CreateThread创建的线程,其内核对象初始引用计数是2,调用CloseHandle减少1次,线程结束时再减少1次,引用计数减少到0时OS才会销毁这个内核对象。MSDN上这些应该都有,windows核心编程上也有,具体细节都可以看看。
令人满意的回答,谢谢~
---------------------------------------------------------
既然提到了MSDN,我想再向大侠请教一下MSDN的使用方法:
我平时也查MSDN,不过一般都是用来查API、查MFC、STL我知道浩瀚的MSDN包含更多windows细节功能描述,远不是简单的查查API这么简单,像大侠描述的
“CloseHandle是减少引用计数,CreateThread创建的线程,其内核对象初始引用计数是2,调用CloseHandle减少1次,线程结束时再减少1次,引用计数减少到0时OS才会销毁这个内核对象”
这么高大上的知识点要怎么从MSDN里面get呢?如果打开MSDN的“目录”来查找,感觉左边的标题又太大太宽泛,不知道何从下手
CloseHandle invalidates the specified object handle, decrements the object's handle count, and performs object retention checks. After the last handle to an object is closed, the object is removed from the system.Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, then close all handles to the thread.
CreateThread线程对象引用计数初始为2的那个,是windows核心编程上的,我以为MSDN上也有看来我记错了。MSDN说实在的我也不太会用,平时也只是用来查找下API
感觉MSDN层次比较深啊,how to
HANDLE hThread = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
CloseHandle(hThread);这个我补充一点儿。
我的理解是这样的:
在调用CloseHandle(hThread)前,hThread这个句柄和CreateThread返回的线程ID都是标识创建的这个线程的,既使这个线程已经结束了。也就是说,在调用CloseHandle(hThread)前,调用GetExitCodeThread、WaitForSingleObject等API都是有效的。
如果调用CloseHandle(hThread)后,再调用GetExitCodeThread、WaitForSingleObject这些API,得到的结果就可能不是有效的,因为可能这个线程结束了,这个hThread被分配到了其他线程,得到的信息就是其他线程的信息。
不明觉厉,根据“zhousitiaoda”大侠的提示我查了下资料,CloseHandle以后就是系统放弃了对这个线程的操作,我理解就是线程被系统“遗弃”以后就自生自灭了,运行完成后自然退出或者跟着进程一块被销毁。
大侠你牌子很多,应该就是传说中的高手了;能否分享一下MSDN使用心得?
大侠你牌子很多,应该就是传说中的高手了;能否分享一下MSDN使用心得?
搜索
定位
添加到收藏夹