关于c++杀线程函数TerminateThread强烈不建议使用

 TerminateThread强烈不建议使用,因为这个函数的执行是异步的,你无法保证调用之后会立即退出,同时线程的堆栈均不会被销毁,导致内存泄露。如果调用了这个函数,请确保使用WaitForSingleObject来等待线程对象的结束。  参考链接:https://blog.csdn.net/kofandlizi/article/details/6458011https…

大家好,又见面了,我是你们的朋友全栈君。

 

TerminateThread强烈不建议使用,因为这个函数的执行是异步的,
你无法保证调用之后会立即退出,同时线程的堆栈均不会被销毁,
导致内存泄露。如果调用了这个函数,请确保使用WaitForSingleObject来等待线程对象的结束。
 

 

参考链接:

https://blog.csdn.net/kofandlizi/article/details/6458011

https://blog.csdn.net/shanzhizi/article/details/7731821

 

ThreadHandle = CreateThread(NULL,0,…..);
CloseHandel(ThreadHandle );//不会直接关闭线程,只是递减线程中的内核对象使用计数。当使用计数为0时,释放内核对象

 

一、Createthread:创建线程后如何回收

1.线程的生命周期就是线程函数从开始执行到return,这时候线程就自动回收了

2.而线程句柄是一个内核对象。我们可以通过句柄来操作线程,句柄生命周期是从CreateThread返回到你CloseHandle(),closehandle后便释放句柄(如果不closehandle句柄资源很快用光)

3.关闭一个句柄对象,表示不再使用该句柄操作线程(即不对线程做任何干预),但不会释放线程,线程释放按上述1其生命周期完成。

4.句柄操作线程例子,如WaitForSingleObject(ThreadHandle,1000)为等待线程1s的操作,假设判断10s后为线程超时的情况,不必调用TerminateThread杀线程,等其线程生命周期结束return即可

 

二、调用TerminateThread杀线程的致命问题:

TerminateThread终止线程后,堆栈没有被回收(注意连栈都没有被回收)

整个进程在分配和回收内存时,占用同一把锁,如果一个线程在使用该锁时被杀死(即临死前该线程在new或delete操作中,则其他线程就无法再使用new或delete了,表现为hang住

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124764.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LINUX 环境变量总结

    LINUX 环境变量总结

    2021年8月22日
    54
  • Jedis配置,项目启动注入JedisPool

    Jedis配置,项目启动注入JedisPoolJedis配置,项目启动注入JedisPool@EnableAutoConfiguration@PropertySource(“classpath:config.properties”)@ConfigurationProperties(prefix=”redis”)publicclassJedisConfig{/***LOGGER*/…

    2025年8月26日
    8
  • 笛卡尔积简单介绍「建议收藏」

    笛卡尔积简单介绍「建议收藏」title:简单介绍笛卡尔积date:2020-10-1320:26:18tags:“离散数学????”categories:“2020/10”简介这个博客参考左孝陵先生的《离散数学》,会尽量简单的讲讲笛卡尔积,能够给大家一个更加具体的认识。什么是序偶要知道什么是序偶,先得弄明白序偶的作用,我觉得序偶就是带顺序的集合,用来表示一些集合表示不了的东西。比如在小学学的直角坐标系上,有两个点,(2,3)和(3,2),点的坐标就是序偶,因为它自带顺序,为什么每次一个点都先读x坐标再读y坐标

    2022年7月11日
    23
  • visual studio创建数据库_读取硬件安装信息

    visual studio创建数据库_读取硬件安装信息管理类是WMI类,如Win32_LogicalDisk,,该类型可表示一个磁盘驱动器,并Win32_Process,,它表示的进程Notepad.exe等。在.NET的项目中,有时候需要获取计算机的硬件的相关信息,在C#语言中需要利用ManagementClass这个类来进行相关操作。以上是对ManagementClass类的部分谁明,此类型的所有公共静态成员都是线程安全的。以上的获取硬件信息的方法可以直接封装在一个类中,可以在项目中直接引用,这样可以加快项目的开发速度。…

    2022年10月2日
    4
  • 史上最详细的虚拟机VMware12安装Windows7教程「建议收藏」

    摘要:VMware是一个强大的虚拟机,可以在一台电脑上模拟真实的环境,创建出一个虚拟机系统,并且可以在这个系统进行测试和其他的操作,当然你也可以直接网上下载现成的虚拟机镜像或者,网络上有很多的Ghost等文件,这类系统可能经过别人一些优化,但是优化的过程可能阉割了某些系统的文件,或者被植入一些广告等,文本一步步详细说明如何利用VMware12安装一个Win7系统,虚拟机win7镜像文件iso…

    2022年4月12日
    44
  • 关于ms17010渗透

    关于ms17010渗透今天来说一下ms17010渗透,大家都知道在2017爆发出来了永恒之蓝病毒,导致比特币严重涨价(为啥我没屯几个,这可能就是我穷的的原因吧),永恒之蓝的漏洞版本名称也被称之为ms17_010今天就来详细和大家讲一下靶机:windows7家庭普通版(感谢猫的薛定谔大佬的靶机镜像)百度云下载传送门提取码:6mus攻击机:kali4.14(emmm没给你们传百度云,自行百度下载吧)首先分别…

    2022年4月29日
    74

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号