如果没有出现提示:"单件失败",就说明当前的测试是成功的,
先开了100条线程,不知道能不能说明问题 :)
class CStaticThread : public CObject
{//在类中作一个Static线程,每需要一个新线程,都需要new一下
public:
DWORD GetThreadID() {return m_dwThreadID;}
BOOL RunThread();
BOOL StopThread(DWORD dwThreadID);
static void SetEventRunTogether(BOOL bIn);
private:
void SetThreadID(DWORD dwThreadID) {m_dwThreadID = dwThreadID;}
static DWORD WINAPI ThreadBuildIn(LPVOID lpArg);
virtual DWORD ThreadBuildIn(void);
void Clear();
void SetFlag_Stop(BOOL bIn) {m_bStop = bIn;}
BOOL GetFlag_Stop() {return m_bStop;}
HANDLE GetEventRunTogether();
private:
DWORD m_dwThreadID;//自定义线程ID
BOOL m_bStop;//要求线程停止的标记(线程主动退出的依据)
HANDLE m_hThread;//线程句柄
HANDLE m_hevtThreadStop;//线程停止事件
static HANDLE m_hevtThreadRunTogether;//线程并发事件
public:
CStaticThread(DWORD dwThreadID);
virtual ~CStaticThread();
};
POSITION pos = m_ThreadList.GetHeadPosition();
while(pos)
{
pThread = m_ThreadList.GetNext(pos);
pThread->RunThread();
}
CString csMsg = "";
csMsg.Format("您在调试环境下看最后一条\"ThreadID XXX Run\"结束的时候,就可以按下并发测试了");
//这里还要加个函数用来判断所有线程是否都在等并发事件才人性化
//改天加上,如果程序没有BUG的话,我想应该可以说明(关于Singleton的)问题了
AfxMessageBox(csMsg);
}
void CMainDlg::OnButton3()
{
if(AfxMessageBox("如果您已经按下了准备线程的按钮,并且得到了线程准备好的提示,请您按下\"确定\"进行并发测试线程安全", MB_OKCANCEL) == IDOK)
{
CStaticThread::SetEventRunTogether(TRUE);
}
}