////////////////////////////////////////////////////////////////////////////// //文件: 线程操作类 //主要功能: // //程序编写: 2011-4-18 // // ///////////////////////////////////////////////////////////////////////////// #pragma once ///*使用该类: // 定义处理函数: // static DWORD WINAPI _ThreadFunc(LPVOID lpVoid); // 设置线程函数: // SetThreadFunc(...); // 启动线程:Run // 等待线程执行结束:WaitForDone // 中断线程:StopThread //*/ namespace NThread { class AFX_EXT_CLASS CProcessThread { public: CProcessThread(void); ~CProcessThread(void); //调用此函数运行线程,先生成内部事件,然后调用虚函数StartThread启动线程 bool Run(); void WaitForDone(void); //等待线程结束 //为了当前线程的事件处理 bool CreateProcessEvent(void); void CloseProcessEvent(void); DWORD WaitForEventFinished(void); //等待事件结束 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); //非正常终止线程,设置m_bCanceled=TRUE protected: virtual bool StartThread(void); //启动线程 virtual void Finished(void); //完成线程后,进行一些用户定义的清除工作 void CloseThread(void); //马上终止并删除线程,不设置m_bCanceled=TRUE void SafeTerminateThread(HANDLE& hThread); protected: HANDLE m_hThread; bool m_bCanceled; HANDLE m_hEvent; bool m_bProcessSucceed; void* m_pParameter; //启动线程函数中带的参数指针 LPTHREAD_START_ROUTINE m_lpThreadFunc; //启动线程需要直接执行的函数 }; }//namespace using namespace NThread;