【C/C++笔记】之TerminateThread函数结束线程的危险性
一、TerminateThread强烈不建议使用,因为这个函数的执行是异步的,
你无法保证调用之后会立即退出,同时线程的堆栈均不会被销毁,而导致内存泄露。如果调用了这个函数,请确保使用WaitForSingleObject来等待线程对象的结束。
能使用TerminateThread结束线程的地方: 线程函数简单,只做简单数据处理不涉及资源分配,无动态对象。但还是需要慎用。
参考链接:https://blog.csdn.net/qq_35097289/article/details/80240702
二、调用TerminateThread杀线程的致命问题:
TerminateThread终止线程后,堆栈没有被回收(注意连栈都没有被回收)
整个进程在分配和回收内存时,占用同一把锁,如果一个线程在使用该锁时被杀死(即临死前该线程在new或delete操作中),则其他线程就无法再使用new或delete了,表现为卡住
参考MSDN:
MSDN 2005 原文:TerminateThread is used to cause a thread to exit. When this occurs, the target thread has no chance to execute any user-mode code and its initial stack is not deallocated. DLLs attached to the thread are not notified that the thread is terminating.
【C/C++笔记】之TerminateThread函数结束线程的危险性相关推荐
- Delphi 如何解决在DLL的入口函数中创建或结束线程时卡死
先看一下使用Delphi开发DLL时如何使用MAIN函数, 通常情况下并不会使用到DLL的MAIN函数,因为delphi的框架已经把Main函数隐藏起来 而工程函数的 begin end 默认就是M ...
- windows结束线程的三种方式
windows 结束线程有三种方式 一.让线程函数执行到 return 二.在线程函数内调用 ExitThread 三.调用 TerminateThread 其中前两种方式比较类似,它们都是通过修改某 ...
- Windows进程与线程学习笔记(五)—— 模拟线程切换
Windows进程与线程学习笔记(五)-- 模拟线程切换 ThreadSwitch代码分析 ThreadSwitch.cpp ThreadCore.h ThreadCore.cpp 总结 Thread ...
- python多线程结束线程_Python多线程和Office第2部分
python多线程结束线程 This is the second and final part of the series. You can find the first part of the bl ...
- 再读苹果《Threading Programming Guide》笔记(二):线程配置与Run Loop
本文为再读苹果<Threading Programming Guide>笔记第二篇,作者付宇轩表示:如今关于iOS多线程的文章层出不穷,但我觉得若想更好的领会各个实践者的文章,应该先仔细读 ...
- python笔记2(函数 面向对象 文件编程 上下文管理器)
记录python听课笔记 文章目录 记录python听课笔记 一,函数 1.介绍python里的函数 2.用户自定义函数 3.变量的作用域 4.参数的传递 5.参数的默认值 6.向函数内部批量传递数据 ...
- python结束线程池正在运行的线程_python之线程与线程池
#进程是资源分配的最小单位,线程是CPU调度的最小单位.每一个进程中至少有一个线程.#传统的不确切使用线程的程序称为只含有一个线程或单线程程序,而可以使用线程的程序被称为多线程程序,在程序中使用一个线 ...
- 线程的退出 java_(转)Java结束线程的三种方法
背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. 线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便 ...
- Java结束线程的三种方法
转载自https://blog.csdn.net/xu__cg/article/details/52831127 线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁 ...
最新文章
- 深圳、长沙高校排名飙升,清北坐实亚洲大学Top2,留学深造还去啥新港日| 泰晤士2020亚洲大学榜...
- C/C++中存储类型
- html背景幻灯片图片,CSS3全屏背景图像幻灯片
- LeetCode 1290 二进制链表转整数
- [html] 说说你对H5的SharedWorker的理解,它有什么运用场景?
- 数据库中主键的选择和使用
- 调用$.ajax不成功,jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法...
- 杀毒软件可以查杀所有计算机病毒吗,好的杀毒软件可以查杀任何病毒,对还是错?...
- 一个JavaScript的小问题
- MySQL卸载及安装
- 基于Canvas和HTML+CSS3构建JavaScript弹幕库
- 酷q点歌机器人软件_【酷q机器人下载】酷q机器人官方下载 V5.14.8A 最新版-七喜软件园...
- dsoframer java_基于DsoFramer控件的Office编辑控件
- Unity中更改鼠标光标样式
- 定义一个Employee类,其中包括表示姓名、街道地址、城市和邮编等属性
- html中img图片绝对路径时无法正常显示的问题
- linux install 文件,linux命令安装msi文件
- 厦门大学计算机学院离散数学复试,2019年厦门大学计算机考研复试办法
- 如何用电脑控制手机屏幕,写工作日志
- 用C#调整Excel 的行高和列宽