解决办法:在主线程的stop中等待需要结束的分线程中while循环已经退出的同步量Event,如果得到这个同步量Event,这说明我们可以释放内存了,此时线程已经正常退出了。 由系统智能的得到将workstatus置为false后的线程正常退出需要的时间,而不是我们的主观臆断。
可能还是从代码中来看,会简单很多:头文件:#PRagma once#include <afxmt.h>class CCCThread{public: CCCThread(void); ~CCCThread(void);public: //开始 int Start(); //结束 int Stop();private: LPBYTE m_pMem; UINT static _sThreadFunc(void *_p);//线程函数 bool m_workstatus;//工作状态 CEvent m_endEvent;//线程是否已经退出循环 CWinThread *m_pThread;//线程指针};源文件:
#include "StdAfx.h"#include "CCThread.h"CCCThread::CCCThread(void){}CCCThread::~CCCThread(void){}int CCCThread::Start(){ m_pMem=new BYTE[10000]; m_workstatus=true; m_pThread=AfxBeginThread(_sThreadFunc,this,THREAD_PRIORITY_NORMAL); TRACE("Start!"); return 0;}int CCCThread::Stop(){ m_workstatus=false; WaitForSingleObject(m_endEvent,INFINITE); TRACE("Been stopped!"); delete [ ]m_pMem; return 0;}UINT CCCThread::_sThreadFunc(void *_p){ CCCThread *pMain=(CCCThread *)_p; while(pMain->m_workstatus) { TRACE("running/n"); } pMain->m_endEvent.SetEvent(); return 0;}在main函数中实践测试过,没有问题。如果有什么问题,希望大家提出。
新闻热点
疑难解答