CreateThread _beginThread _begintheadex AfxBeginThead思考

 

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,还需要程序员对类型,安全性检查进行更多的思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值