关于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何在Ubuntu 20.04 LTS上安装Microsoft Edge?

    如何在Ubuntu 20.04 LTS上安装Microsoft Edge?在本教程中,我们将向您展示如何在香港服务器www.a5idc.net的Ubuntu20.04LTS系统上安装MicrosoftEdge。微软已经发布了EdgeforLinux的第一个测试版本

    2022年7月4日
    24
  • Tokyo Tyrant(TTServer)系列(四)-tcrmgr远程管理与调试

    Tokyo Tyrant(TTServer)系列(四)-tcrmgr远程管理与调试

    2021年12月9日
    36
  • 2021年计算机保研-假211真双非三无的失败保研经历(武大/复旦/计算所/华科/同济/上交)

    2021年计算机保研-假211真双非三无的失败保研经历(武大/复旦/计算所/华科/同济/上交)从知乎@孤芳倚花红转过来啦~一、个人情况学校:华中地区211,计算机科学与技术(感觉华中211CS水平都差不多)。英语:CET4-534,预推免CET6-447。夏令营的时候没有六级真的太伤了,第一次裸考没过,第二次忘了报名,幸亏第三次考过了预推免可以用上。成绩:专业排名3/140,预推免2/147。211只有rk1和非rk1,非rk1≈没学上。科研:国家级、省级大创各一项,均是负责人,前者OD,后者SOD。没有论文,但是有一定CV和DL的基础,不惧面试。竞赛:省一及以上数学建模、数学竞赛奖项

    2022年7月25日
    64
  • 大数据学习内容有哪些?大数据学习路线图

    大数据学习内容有哪些?大数据学习路线图很多人想学习大数据,但是都不清楚大数据学习应该怎么下手。大数据开发工程师简单整理了一下大数据学习路线图,希望对于学习大数据的朋友,有一定的帮助。 总的来说,如果是从零基础开始学习,总共分为八个阶段  第一阶段:HTML+css第二阶段:JAVASE学习第三阶段:javaweb第四阶段:企业级开发框架(JAVAEE)学完了java部门,就要开始大数据的技术学习…

    2022年5月24日
    39
  • 2022年流动式起重机司机考试题库模拟考试平台操作「建议收藏」

    2022年流动式起重机司机考试题库模拟考试平台操作「建议收藏」题库来源:安全生产模拟考试一点通公众号小程序2022年流动式起重机司机特种作业证考试题库系流动式起重机司机考题的多种练习模式!2022年流动式起重机司机考试题库模拟考试平台操作根据流动式起重机司机考前押题。流动式起重机司机全部考试题库通过安全生产模拟考试一点通上错题练习。1、【多选题】《中华人民共和国特种设备安全法》规定,特种设备生产、经营、使用单位()被查封、扣押的特种设备或者其主要部件的,责令改正,处五万元以上二十万元以下罚款;情节严重的,吊销生产许可证,注销特种设备使用登记证书。(A..

    2022年9月6日
    2
  • 研究一下RabbitMQ

    研究一下RabbitMQ

    2021年7月12日
    115

发表回复

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

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