CWinThread类,使用后要不要使用CloseHandle释放内核

本文探讨了在VC++中使用AfxBeginThread()创建线程时如何正确管理线程资源的问题。重点讨论了线程结束后是否需要调用CloseHandle及delete操作来释放资源,并解释了CWinThread类中m_bAutoDelete成员的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在VC++中用AfxBeginThread()开启线程的时候,返回的是CWinThead类的指针。但是使用后是否应该用CloseHandle释放内核资源呢?

在《Windows核心编程》中说在使用ExitThread()函数终止线程的时候虽然系统资源会被清理掉,但是C/C++资源(如C++类资源)不会被销毁。使用TerminateThread函数终止线程时,该线程的堆栈资源是不会被销毁的。并建议最好的使线程结束的方式就是使线程函数正常退出。但是这里不知道是否要用CloseHandle来关闭系统内核对象,也就是句柄。以及是否需要delete CWinThread指针。

经查MSDN,在CWinThread类中有个m_bAutoDelete的变量,该变量是在线程结束的时候是否Delete掉自己,而这个值默认是设为TRUE的。delete的时候是会执行该类的析构函数的,在析构函数中应该是会销毁系统资源的。如下图,m_bAutoDelete的值是1。

当线程结束的时候,在查看CWinThread类中的值,发现是乱码之类的,这时其实该CWndThread指针所指的对象已经被delete掉了。如下图:


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值