天天看點

簡單的線程基類

typedef unsigned (WINAPI *PTHREADFUN)(LPVOID lpParameter);

class CThread

{

public:

 CThread(void) {}

 ~CThread(void) {}

 void Start(void);

 void Stop(void) const { CloseHandle(m_hThread); }

 static DWORD WINAPI ThreadFun(LPVOID lpParameter);

 virtual DWORD WINAPI ThreadWorkItem(LPVOID lpParameter) = 0;

private:

 HANDLE m_hThread;

 DWORD m_dwThreadID;

};

inline void CThread::Start(void)

{

 m_hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, NULL, (PTHREADFUN) ThreadFun, this, 0, (unsigned*) &m_dwThreadID));

 if (m_hThread == NULL)

 {

  throw Exception("Error: Start thread!");

 }

}

inline DWORD WINAPI CThread::ThreadFun(LPVOID lpParameter)

{

 CThread *pThread = reinterpret_cast<CThread*> (lpParameter);

 pThread->ThreadWorkItem(lpParameter);

 return 0;

}

隻要繼承上面的類,然後重寫ThreadWorkItem(LPVOID)這個函數就可以了。

class test : public CThread

{

public:

 test(void) {}

 ~test(void) {}

 DWORD WINAPI ThreadWorkItem(LPVOID lpParameter){ cout<<"線程執行的操作"<<endl; }

};

繼續閱讀