|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//<2F>ļ<EFBFBD>: <20>̲߳<DFB3><CCB2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
|
|
|
|
|
|
//
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2011-4-18
|
|
|
|
|
|
//
|
|
|
|
|
|
//
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
///*ʹ<>ø<EFBFBD><C3B8><EFBFBD>:
|
|
|
|
|
|
// <20><><EFBFBD>崦<EFBFBD><E5B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static DWORD WINAPI _ThreadFunc(LPVOID lpVoid);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>̺߳<DFB3><CCBA><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// SetThreadFunc(...);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>̣߳<DFB3>Run
|
|
|
|
|
|
// <20>ȴ<EFBFBD><C8B4>߳<EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>WaitForDone
|
|
|
|
|
|
// <20>ж<EFBFBD><D0B6>̣߳<DFB3>StopThread
|
|
|
|
|
|
//*/
|
|
|
|
|
|
|
|
|
|
|
|
namespace NThread
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
class AFX_EXT_CLASS CProcessThread
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CProcessThread(void);
|
|
|
|
|
|
~CProcessThread(void);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣߳<DFB3><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>¼<EFBFBD><C2BC><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>麯<EFBFBD><E9BAAF>StartThread<61><64><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|
|
|
|
|
bool Run();
|
|
|
|
|
|
void WaitForDone(void); //<2F>ȴ<EFBFBD><C8B4>߳̽<DFB3><CCBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
//Ϊ<>˵<EFBFBD>ǰ<EFBFBD>̵߳<DFB3><CCB5>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool CreateProcessEvent(void);
|
|
|
|
|
|
void CloseProcessEvent(void);
|
|
|
|
|
|
DWORD WaitForEventFinished(void); //<2F>ȴ<EFBFBD><C8B4>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
bool IsCanceled(void) { return m_bCanceled; }
|
|
|
|
|
|
|
|
|
|
|
|
bool IsSucceed() { return m_bProcessSucceed; }
|
|
|
|
|
|
void EnableSucceed(bool bEnable) { m_bProcessSucceed = bEnable; }
|
|
|
|
|
|
|
|
|
|
|
|
virtual void SetThreadFunc(LPTHREAD_START_ROUTINE lpThreadFunc, void* pParameter);
|
|
|
|
|
|
virtual bool StopThread(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>̣߳<DFB3><CCA3><EFBFBD><EFBFBD><EFBFBD>m_bCanceled=TRUE
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual bool StartThread(void); //<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|
|
|
|
|
virtual void Finished(void); //<2F><><EFBFBD><EFBFBD><EFBFBD>̺߳<CCBA><F3A3ACBD><EFBFBD>һЩ<D2BB>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
void CloseThread(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ɾ<EFBFBD><C9BE><EFBFBD>̣߳<DFB3><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_bCanceled=TRUE
|
|
|
|
|
|
void SafeTerminateThread(HANDLE& hThread);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
HANDLE m_hThread;
|
|
|
|
|
|
bool m_bCanceled;
|
|
|
|
|
|
|
|
|
|
|
|
HANDLE m_hEvent;
|
|
|
|
|
|
bool m_bProcessSucceed;
|
|
|
|
|
|
|
|
|
|
|
|
void* m_pParameter; //<2F><><EFBFBD><EFBFBD><EFBFBD>̺߳<DFB3><CCBA><EFBFBD><EFBFBD>д<EFBFBD><D0B4>IJ<EFBFBD><C4B2><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
|
LPTHREAD_START_ROUTINE m_lpThreadFunc; //<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>Ҫֱ<D2AA><D6B1>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}//namespace
|
|
|
|
|
|
|
|
|
|
|
|
using namespace NThread;
|
|
|
|
|
|
|