退出线程可以有四种方法:

1.线程函数的return返回(最好这样):
其中用线程函数的return返回, 而终止线程是最安全的, 在线程函数return返回后, 会清理函数内申请的类对象, 即调用这些对象的析构函数. 然后会自动调用 _endthreadex()函数来清理 _beginthreadex(...)函数申请的资源(主要是创建的tiddata对象).

2.调用 _endthreadex()函数 或 ExitThread()函数(最好不要):
如果使用这两种方法退出线程, 则不会执行线程函数的return语句, 所以就不会调用线程函数作用域内申请的类对象的析构函数, 会造成内存泄露.

剩下两种是在程序设计中一定要避免的.
3.用同一个进程中的另一个线程调用 TerminateThread()函数(必须避免);
4.终止该线程所在的进程(绝对避免);

但是要说_endthreadex完全没有用肯定是不对的,_endthreadex并不是一个过时的函数,正确的使用并不会带来问题。
比如在线程的主函数中,return是_endthreadex的一个良好替代,就像main函数里面return是exit()或ExitProccess()的良好替代一样,但是这不表示exit函数没用。比如线程调用了一个子函数,如果子函数决定退出线程,return是没用的,_endthreadex即可终结线程。

但是这个设计不好,因为可能造成LZ提出的资源泄漏。尤其考虑到后台线程终结后的资源泄漏比主线程的资源泄漏更要命(主线程退出后,进程就退出了,OS会清理一切资源,无所谓泄露不泄露,而子线程退出后主线程可能还会运行很久,并且可能有大量的同类型的子线程退出,会造成要命的泄露)
良好的设计还是返回线程的主函数,让threadproc来决定是不是要退出,从这个意义上说,_endthreadex没有必要。微软也指出,有些程序员就是要调用exit系列函数(ExitThread,ExitProccess等),没辙,只好提供了。

C/C++中退出线程的四种解决方法相关推荐

  1. cf自动退出服务器,win7登录穿越火线CF后自动退出四种解决方法

    穿越火线CF是一款第一人称射击网游,很多游戏玩家都喜欢玩这款游戏,可是一些用户说win7登录穿越火线CF后自动退出,导致游戏没办法继续进行,怎么回事呢?造成win7登录穿越火线CF后自动退出的原因有很 ...

  2. 产品设计中多见的四种倒角方法

    在工业设计中,对产品外观设计特别是关键点的把握,基本上离不开一个专业术语--倒角.无论是手绘画外观设计或是三维外观,都需要把握倒角的应用. 1.倒角定义 在机械设备制造中,倒角就是指将铸件的边角切割成 ...

  3. w7计算机防火墙无法更改,win7系统提示防火墙无法更改某些设置错误代码0x8007437的原因及四种解决方法...

    win7系统提示"防火墙无法更改某些设置,错误代码0x8007437",这该怎么办呢?下面脚本之家的小编就带来win7系统提示防火墙无法更改某些设置错误代码0x8007437的原因 ...

  4. html设置打开页面后自动关闭,Win7系统打开IE浏览器后页面自动关闭的四种解决方法...

    很多用户都遇到一件很奇葩的问题,就是在win7系统下打开IE浏览器,浏览网页,没有进行任何操作,突然所有页面就自动关闭了,又要重新启动,没过多久又出现这样情况,怎么回事呢?导致Win7系统打开IE浏览 ...

  5. python token post403原因_Django的POST请求时因为开启防止csrf,报403错误,及四种解决方法...

    Django默认开启防止csrf(跨站点请求伪造)攻击,在post请求时,没有上传 csrf字段,导致校验失败,报403错误 解决方法1: 注释掉此段代码,即可. 缺点:导致Django项目完全无法防 ...

  6. vue移动端html5页面根据屏幕适配的四种解决方法

    最近做了两个关于h5页面对接公众号的项目,不得不提打开微信浏览器内置地图导航的功能确实有点恶心.下次想起来了的话,进行总结分享一下如何处理.在vue移动端h5页面当中,其中适配是经常会遇到的问题,这块 ...

  7. 计算机无法连接无线信号,win7系统连接无线信号时提示Windows无法连接到路由器名称的四种解决方法...

    现如今网络发展速度非常快,无线网络已经普及了,使用率高了遇到的问题也就多了.比如有时候笔记本win7系统连接无线信号时出现"Windows无法连接到路由器名称"(如下图所示),该如 ...

  8. ie11不兼容java_IE11浏览器网页不兼容的四种解决方法

    Edge浏览器已然成为最新win10系统的默认浏览器,但是用户量却远远不及IE11,IE11虽然性能得到了大的改进,但在浏览网页的时候还是会出现一些兼容性的问题,下面小编就讲为大家分享IE 11浏览器 ...

  9. 苹果7 无线流量连接不上网络连接服务器,iPhone7连不上wifi无线网的四种解决方法...

    iPhone7连不上wifi无线网的四种解决方法 重新打开无线 如果是出门在外,想要连接一个以前没有连接过的无线网络,但又连接不上的话,可以先尝试关闭无线,再打开无线试试.在「设置」列表中,可以关闭. ...

最新文章

  1. 地区的json数据_Python 连接开放航空交通数据,轻松构建航班跟踪应用!
  2. 美国法官驳回特朗普工作签禁令:超出权职范围
  3. 【超经典】Java多态有什么好处?怎样用?
  4. 我对 ASP.NET Web API 的随想
  5. python有什么用-python有什么用(用处和用途)
  6. zabbix详解(十三)——zabbix微信报警实战
  7. Error : Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so
  8. 复指数与高斯函数乘积的傅里叶变换_球谐光照——球谐函数
  9. SpringCloud-Netflix
  10. 金士顿服务器内存条怎么看型号,【查看内存条参数】 内存条上的参数怎么看...
  11. 每日写题分享--包含min函数的栈/双栈实现
  12. 多人网络游戏服务器开发基础学习笔记 II: 帧同步 | 游戏客户端预测原理分析 | FPS 游戏状态同步
  13. submit()和onsubmit()的区别
  14. 2022年Roguelike“割草”游戏风潮为何刮的如此强劲?
  15. python简单实例-python简单案例
  16. 蓝牙BLE芯片PHY6222之GPIO按键操作
  17. 被批准的司法拍卖平台有哪些?
  18. 【51Nod1386】双马尾机器人(分块+dp)
  19. 我的LaTeX入门--h
  20. Android系统的50大必备秘籍(仅限初级用户)

热门文章

  1. CSS学习18之小试牛刀
  2. yapi 插件_强大的开源API接口可视化管理平台——YAPI
  3. 【编程之美】24点游戏
  4. 第三天2017/03/30(上午:二级指针的(输入)内存模型:(共三种模型))
  5. 视觉检索:视频多帧排序
  6. Kafka剖析(一):Kafka背景及架构介绍
  7. 浅谈Spring框架注解的用法分析
  8. JAVA数据库编程(JDBC技术)-入门笔记
  9. 如何把 Word 中的表格快速插入 LaTeX?
  10. matlab中有哪些有趣的命令?好玩的matlab彩蛋