最近看一本书<windows程序设计>,书写的不错,很通俗易懂,我对其中的一些例子自己也做了练习,学到了不少.在我看线程这一块时,还是有不少感悟.
在看到afxbeginthread时,对这个方法蛮感兴趣的,创建线程很方便,但是我注意了下,该函数返回的不是创建线程的句柄,而是cwndthread的指针对象,而我想用WaitForMultipleObjects等待线程返回,该怎么办呢,cwndthread里有一个m_hThread对象,是创建线程的句柄.我以为这样就可以了,但是在实际写代码中却出现了很大的问题,WaitForMultipleObjects不起作用,我很郁闷,看了下cwndthread的结构以及实现代码,才恍然大悟,原来,用afxbeginthread创建的线程在结束时,会自动释放对象,关闭句柄,清理内存,这一切都是在cwndthread的析构函数里进行,不需要外界的干预,看了下说明,还有个m_bAutoDelete变量,是指示结构是否自动释放对象的,我按书上说的试验了一下,竟然不行,继续郁闷,不过我还是找到了一个不错的通用解决办法,一下是正确解决的完整代码:
注意编译的时候要在工程----设置------general里设置use mfc in a shared dll即可,否则会报错.
我说一下解决思路,因为afxbeginthread创建的线程运行后会自动释放对象,也就是说句柄无效了,WaitForMultipleObjects自然也不起作用了,于是我用WaitForSingleObject等待最后一个线程创建的句柄便可以了.
以后只是我个人理解,如有不妥,或有更好的办法,还请多多指教.