windows线程的封装.
1 封装线程类的声明
// 定义线程函数的实现接口类,供
class CThreadSink{ public: virtual void run() = 0; };
class CCHThread { public: CCHThread(CThreadSink* pThreadSink = NULL); ~CCHThread(); public: void SetFunc(CThreadSink* pThreadSink = NULL); void Start();
void suspend(); void stop(); public: static DWORD WINAPI ThreadFunction(LPVOID lpParam); private: HANDLE m_hthread;
};
2 封装线程类的实现
DWORD WINAPI MyThreadFunction(LPVOID lpParam) { CThreadSink* pThreadSink = (CThreadSink*)lpParam; if (pThreadSink) { pThreadSink->run(); } return 0; }
CCHThread::CCHThread(CThreadSink* pThreadSink) { DWORD drThreadID = 0; m_hthread = ::CreateThread(NULL, 0, &MyThreadFunction, (LPVOID)pThreadSink, CREATE_SUSPENDED, &drThreadID); if (NULL == m_hthread) { DWORD dr = GetLastError(); //AfxMessageBox(_T("创建线程出错,请检查!")); } }
CCHThread::~CCHThread() { if (m_hthread) { ::CloseHandle(m_hthread); } }
void CCHThread::SetFunc(CThreadSink* pThreadSink) { // DWORD drThreadID = 0; // m_hthread = CreateThread(NULL, 0, MyThreadFunction, pThreadSink, CREATE_SUSPENDED, &drThreadID); // 暂停模式创建线程 // if (NULL == m_hthread) // { // DWORD dr = GetLastError(); // //AfxMessageBox(_T("创建线程出错,请检查!")); // } }
void CCHThread::Start() { if (m_hthread) { ResumeThread(m_hthread); } }
void CCHThread::suspend() { if (m_hthread) { SuspendThread(m_hthread); } }
void CCHThread::stop() { if (m_hthread) { ::WaitForSingleObject(m_hthread, INFINITE); } }
DWORD WINAPI CCHThread::ThreadFunction(LPVOID lpParam) { CThreadSink* pThreadSink = (CThreadSink*)lpParam; if (pThreadSink) { pThreadSink->run(); } return 0; }