为什么必须要使用CloseHandle关闭句柄
来源:互联网 发布:淘宝刷但 编辑:程序博客网 时间:2024/04/26 23:42
很多程序在创建线程都这样写的:
ThreadHandle = CreateThread(NULL,0,.....);
CloseHandel(ThreadHandle );
1,线程和线程句柄(Handle)不是一个东西,线程是在cpu上运行的.....(说不清楚了),线程句柄是一个内核对象。我们可以通过句柄来操作线程,但是线程的生命周期和线程句柄的生命周期不一样的。线程的生命周期就是线程函数从开始执行到return,线程句柄的生命周期是从CreateThread返回到你CloseHandle()。
2,线程是一种内核对象,系统维护着每一个内核对象,当每个内核对象引用记数为0时,系统就从内存中释放该对象,CloseHandle就是将该线程对象的引用记数减1。所有的内核对象(包括线程Handle)都是系统资源,用了要还的,也就是说用完后一定要closehandle关闭之,如果不这么做,你系统的句柄资源很快就用光了。
3,如果你CreateThread以后需要对这个线程做一些操作,比如改变优先级,被其他线程等待,强制TermateThread等,就要保存这个句柄,使用完了在CloseHandle。如果你开了一个线程,而不需要对它进行如何干预,CreateThread后直接CloseHandle就行了。
所以CloseHandel(ThreadHandle );
只是关闭了一个线程句柄对象,表示我不再使用该句柄,即不对这个句柄对应的线程做任何干预了。并没有结束线程。
如果你觉得多了一个变量,也可以写为:
CloseHandel(CreateThread(NULL,0,.....));
- 为什么必须要使用CloseHandle关闭句柄
- 为什么必须要使用CloseHandle关闭句柄
- 为什么必须要使用CloseHandle关闭句柄
- CloseHandle()函数(关闭线程句柄)的使用
- CloseHandle()函数(关闭线程句柄)的使用
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- 为什么wait()和notify()必须要使用sychronized
- windows thread 是否有必要调用closehandle 关闭线程句柄
- JDK的动态代理为什么必须要使用接口与使用CGLIB动态代理
- Java中final变量为什么在使用前必须要进行初始化
- 多线程CreateThread()之后,CloseHandle()为什么不会直接关闭线程。
- 句柄泄露与CloseHandle()
- 句柄泄露与CloseHandle()
- 句柄泄露与CloseHandle
- .NET中栈和堆的比较
- 特殊类型BOOL和nil
- 从一个数组中找出几个数,使其相加等于某个值的算法(数组元素可以重复)
- 如何迅速成为Java高手
- Spring.NET学习笔记2--环境搭建(基础篇)
- 为什么必须要使用CloseHandle关闭句柄
- 手工破解PPS享受VIP的方法
- gluPerspective(解释得很好)
- 小波提升
- 每个Java初学者都应该搞懂的问题!
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)
- jquery之修改元素样式(添加和删除类名称,使用addClass(),removeClass(),toggleClass()方法)
- enum关键字——C语言深度剖析
- froyo源码来电、启动模拟器就就开始初始化Phone应用