`
zhangziyangup
  • 浏览: 1187477 次
文章分类
社区版块
存档分类
最新评论

创建线程后为什么关闭了线程句柄,线程还是可以运行?

 
阅读更多
主线程只要拥有线程句柄,事后就可以对线程执行某些操作,比如查询线程状态等等,靠的就是句柄,如果没有句柄,系统就无从知道要查的是那个线程的状态。但保持这个句柄不关闭,并不是线程运行的条件。

关闭线程句柄只是释放句柄资源,新开启线程后,如果不再利用其句柄,应该关闭句柄,释放系统资源。关闭线程句柄和线程的结束与否没有关系

句柄可以认为是系统对资源(如线程)的分配的一个编号。关闭这个编号,对于不同的资源,效果不尽相同。对于线程来说,关闭这个编号并不意味着终止线程,只是之后很难再操纵这个线程。这就好比摘掉了门牌号,并不伤害这一家人,只是以后往这送信就麻烦些了。还有,如果主线程只想创建线程,而并不想之后再查询或操纵它,那么及时关闭句柄是个好习惯,免得当时没关,以后又忘了,于是泄漏了系统的句柄资源(系统句柄总数是有限的)。

如果知道引用计数是怎么回事就很好解释了。CloseHandle(hThread) 只是减去一个hThread的引用计数。

线程句柄就像你家的地址,线程就像你的家房子,你说如果没有了你家的地址,难道就没有你家的房子了吗?
线程与线程句柄也是一样的道理,句柄只是可以对这个线程作一些操作。


CloseHandle是关闭线程句柄,用来释放线程资源的,不是终止线程的.线程的终止用terminatethread或exitthread,TerminateThread的使用会导致各类资源释放问题,主要是与该线程相连的各类dll,他们无法得到线程退出的通知。应该在线程中自然退出(即隐式调用ExitThread)或直接显式调用ExitThread。退出的时机应由同步对象或其他机制来实现,而且主线程一般应使用WaitForSingleObject函数等待该线程的句柄,以确保线程的退出。 希望对你有帮助 ......

转自:http://blog.csdn.net/boy8239/article/details/2148373

分享到:
评论

相关推荐

    易语言取窗口进程线程句柄等源码

    `CreateThread` API函数创建新线程的同时会返回线程句柄,而`OpenThread`函数则可以打开已存在的线程并获取其句柄。线程句柄可用于控制线程的执行,如挂起、恢复、终止线程等。 4. **易语言源码分享站**: `SanYe`...

    易语言关闭多线程句柄方法

    2. 关闭线程句柄命令的参数为线程句柄,返回真表示已成功关闭线程句柄。 3. 在Linux下,如果线程已经结束,本命令可能返回假。 4. 关闭线程句柄只是释放系统资源,线程可能继续在执行,但是没了句柄我们已经不能对这...

    易语言取窗口进程线程句柄等

    易语言取窗口进程线程句柄等源码,取窗口进程线程句柄等,根据进程名取窗口句柄,根据窗口句柄取进程名,取进程线程标识符_,打开进程_,寻找顶级窗口_,关闭内核对象_,创建系统进程快照,取快照中第一个进程信息,取快照中下...

    线程的创建与撤销

    ### 线程的创建与撤销 ...此外,还应当注意线程的生命周期管理,合理地使用`WaitForSingleObject()`等待线程结束和`CloseHandle()`关闭线程句柄,从而有效地释放资源,防止内存泄漏等问题的发生。

    MFC创建多线程(工作者线程)demo

    // 关闭线程句柄,释放资源 CloseHandle(hThread); return 0; } ``` 总结来说,虽然`BeginThread`在某些情况下可能更为灵活,但在MFC环境中,推荐使用`AfxBeginThread`,因为它能更好地集成MFC框架,简化线程的...

    滴水线程创建句柄表课上代码

    创建句柄表时,我们可以选择使用哈希表、数组或者其他适合的数据结构,以便于快速查找特定的线程句柄。 在"进程创建句柄表课程代码"中,可能涵盖了以下知识点: 1. 线程的创建:讲解如何使用系统API(如Windows API...

    VB创建线程动态链接库(VBCreateThread.dll)

    返回值:线程句柄 long型 VB申明及参数示例: Public Declare Function CreateThreadE Lib "VBCreateThread.dll" (ByVal address As Long, ByVal p0 As Long, ByVal p1 As Long, ByVal p2 As Long, ByVal p3 As Long)...

    VC++在线程中创建并显示窗口

    创建线程时,我们需要提供一个线程函数,这个函数将在新线程中运行。在这个例子中,线程函数可能会用于创建和显示窗口。线程函数通常会遵循这样的步骤: 1. 初始化窗口类(WNDCLASS):设置窗口类的风格、背景刷、...

    创建线程及线程间通信

    此外,还可以使用其他的同步机制,如条件变量(Condition Variables),来协调生产者和消费者的动作,例如,当缓冲区为空时,消费者线程可以等待条件变量的信号,而生产者线程则在生产产品后发送这个信号。...

    易语言源码易语言创建远程线程源码.rar

    6. **清理资源**:完成任务后,记得释放资源,如关闭进程句柄、卸载DLL等。 创建远程线程在安全性和合法性方面需要注意,不当的操作可能导致目标进程崩溃或系统不稳定。同时,这也可能涉及到安全问题,比如被用来...

    易语言多线程控制线程数量源码

    线程句柄 = 创建线程(线程入口, 参数) ``` 这里,`线程句柄`是一个变量,用来存储新创建的线程的标识,便于后续操作。 3. **启动线程**: 创建线程对象后,需要调用`启动线程`命令来开始执行线程。如: ```...

    采用_beginthreadex创建多线程

    最后,当线程不再需要时,应使用`CloseHandle`关闭线程句柄,以释放系统资源。在我们的5个线程示例中,这应在每个线程完成后进行。 总之,`_beginthreadex`是C++中创建多线程的有效方式,结合适当的同步机制和等待...

    易语言源码易语言取窗口进程线程句柄等源码.rar

    在“易语言源码易语言取窗口进程线程句柄等源码.rar”这个压缩包中,包含的是用易语言编写的获取窗口、进程和线程句柄等相关功能的源代码。这些源码对于学习易语言,尤其是深入理解Windows API调用和系统级操作的...

    CreateThread创建多线程与单线程比较

    用CreateThread()函数创建线程将返回一个线程句柄,通过该句柄你可以控制和操作该线程,当你不用时可以一创建该线程后就关闭该句柄,有专门的函CloseHandle()。关闭句柄不代表关闭线程,只是你不能在外部控制该...

    进程线程 句柄

    最后,当线程完成后,使用`CloseHandle`函数释放句柄资源。 #### 七、总结 进程与线程是操作系统的核心组成部分,它们为多任务并行处理提供了基础。同时,句柄作为操作系统内部对象的标识符,对于操作这些对象至关...

    易语言创建线程

    3. **关闭内核对象**:在创建线程后,线程句柄是一个内核对象,需要正确管理和释放。当线程完成其任务或者不再需要时,应调用`关闭内核对象`函数来释放资源,防止内存泄漏。正确关闭线程句柄是确保程序健壮性的重要...

    创建线程 示例 vc++

    在VC++环境中,创建线程是一项重要的多任务处理技术,特别是在开发实时系统、网络编程以及高性能应用程序时。本文将深入探讨如何在VC++中创建线程,并基于《vc++网络编程经典案例》一书中的示例进行讲解。 线程是...

    将线程代码外置,目的是可以动态创建不同功能线程

    - **可复用性**:将线程代码封装为单独的类或模块,可以重复使用这些代码来创建具有相同功能的线程。 - **灵活性**:当需要添加新功能时,只需要编写新的线程类,而无需修改已有的核心代码。 - **模块化**:线程...

    vc线程操作(创建、终止等)

    例如,在创建线程后,应该确保正确地关闭线程句柄,以避免资源泄露。 ```cpp CloseHandle(hThread); // 关闭线程句柄 ``` 此外,当线程被强制终止后,应检查是否成功终止,并释放相关资源。 #### 四、总结 在...

    多线程的创建 vc

    1. 结束线程:可以使用`ExitThread`结束当前线程,或调用`CloseHandle`关闭线程句柄来请求结束线程。 2. 等待线程:`WaitForSingleObject`或`WaitForMultipleObjects`可以等待一个或多个线程完成。 总结,多线程在...

Global site tag (gtag.js) - Google Analytics