关于mfc里afxbeginthread的一些感悟

本文探讨了使用AFXBeginThread创建线程的方法及注意事项。通过实践发现,由于CWndThread对象会在线程结束后自动释放,导致无法直接使用WaitForMultipleObjects等待线程完成。文章提供了一种解决方案,即使用WaitForSingleObject等待最后一个线程。

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

      最近看一本书<windows程序设计>,书写的不错,很通俗易懂,我对其中的一些例子自己也做了练习,学到了不少.在我看线程这一块时,还是有不少感悟. 

      在看到afxbeginthread时,对这个方法蛮感兴趣的,创建线程很方便,但是我注意了下,该函数返回的不是创建线程的句柄,而是cwndthread的指针对象,而我想用WaitForMultipleObjects等待线程返回,该怎么办呢,cwndthread里有一个m_hThread对象,是创建线程的句柄.我以为这样就可以了,但是在实际写代码中却出现了很大的问题,WaitForMultipleObjects不起作用,我很郁闷,看了下cwndthread的结构以及实现代码,才恍然大悟,原来,用afxbeginthread创建的线程在结束时,会自动释放对象,关闭句柄,清理内存,这一切都是在cwndthread的析构函数里进行,不需要外界的干预,看了下说明,还有个m_bAutoDelete变量,是指示结构是否自动释放对象的,我按书上说的试验了一下,竟然不行,继续郁闷,不过我还是找到了一个不错的通用解决办法,一下是正确解决的完整代码:

注意编译的时候要在工程----设置------general里设置use mfc in a shared dll即可,否则会报错.

我说一下解决思路,因为afxbeginthread创建的线程运行后会自动释放对象,也就是说句柄无效了,WaitForMultipleObjects自然也不起作用了,于是我用WaitForSingleObject等待最后一个线程创建的句柄便可以了.

        以后只是我个人理解,如有不妥,或有更好的办法,还请多多指教.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值