博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CreateThread _beginThread _begintheadex AfxBeginThead思考
阅读量:5174 次
发布时间:2019-06-13

本文共 733 字,大约阅读时间需要 2 分钟。

CreateThread

创建一个新线程,请不要使用这个函数,因为在线程运行时,常常要用到C运行时库如fopen,malloc,strtok,等函数,这些函数
需要线程局部存储的数据块,这个数据块通常需要在创建线程时建立,如果使用CreateThread,这个数据块就没有建立,在线程
运行时,线程会临时创建这些数据块,而这些数据块的存在线程并不知道,所以在线程退出时也无法清理。从而导致内在泄露

_beginThread

这个函数创建线程,线程结束时去调用endthread或者_endthreadex释放申请的资源,endthread会自动关闭线程的句柄,所以不
用调用CloseHandle;而_endthreadex则不会关闭。
在异步过程调用如WaitForSingleObject等待线程退出,_beginThread函数会有问题
1、当线程结束太快时,返回的线程句柄会出错,有可能会指向另外一个线程句柄
2、当endthread结束时,在重置信号状态前,会销毁线程对象,

_beginThreadex
创建线程比较安全,可以成功的等待线程退出。在线程结束时调用_endthreadex会释放所有资源除了线程句柄。不调用不会释放。

AfxBeginThread
不要在MFC程序中使用_beginThreadex,是因为前者是MFC封装的启动线程函数,里面包含了很多和MFC相关的启动信息,而且封装了一些常用的操作,使用起来也比较方便。另外_beginThreadex,还需要程序员对类型,安全性检查进行更多的思考。

转载于:https://www.cnblogs.com/gudu0723/archive/2012/06/20/2555966.html

你可能感兴趣的文章
【bzoj3456】城市规划(多项式求逆+dp)
查看>>
#ifdef 支持Mac #ifndef 支持Windows #if defined (Q_OS_WIN) 应该可以再两个系统通用
查看>>
linux源码中的核心数据结构
查看>>
EF执行SQL语句
查看>>
Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
查看>>
webpack 样式表抽离成专门的单独文件并且设置版本号
查看>>
个人作业week7——前端开发感想总结
查看>>
VC Dimension -衡量模型与样本的复杂度
查看>>
android 中 ViewPager 的平常用法 ViewPager+ Views
查看>>
POJ 2449 Remmarguts' Date (SPFA + A星算法) - from lanshui_Yang
查看>>
ZOJ 1654 二分匹配基础题
查看>>
js笔记
查看>>
制作具有SSH、MySQL功能的Chroot
查看>>
TWaver html5 + NodeJS + express + websocket.io + redis 快速搭建项目(二)
查看>>
python 初学02 替换文件内容
查看>>
选择语句 if else
查看>>
STL中的set使用方法详细!!!!
查看>>
sealed关键字的作用
查看>>
Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
查看>>
HDU - 4472 Count
查看>>