#include "iostream" #include "windows.h" using namespace std; class CWorkerThread{ public: CWorkerThread(LPCTSTR m_szName):m_szName(m_szName),m_hThread(INVALID_HANDLE_VALUE){ m_hThread=CreateThread( NULL, 0, ThreadProc, reinterpret_cast<LPVOID>(this), 0, NULL ); } virtual ~CWorkerThread(){CloseHandle(m_hThread);} virtual void WaitForCompletion(){ WaitForSingleObject(m_hThread,INFINITE); } virtual void SetPriority(int nPriority){ SetThreadPriority(m_hThread,nPriority); } virtual void Suspend(){ SuspendThread(m_hThread); } virtual void Resume(){ ResumeThread(m_hThread); } protected: static DWORD WINAPI ThreadProc(LPVOID lpParam){ CWorkerThread *pThis= reinterpret_cast<CWorkerThread*>(lpParam); pThis->DoStuff(); return (0); } virtual void DoStuff(){ for(int n=0;n<10;n++){ cout<<"Thread"<<m_szName<<"ID:"<<GetCurrentThreadId()<<",count"<<n<<endl; } } protected: HANDLE m_hThread; LPCTSTR m_szName; }; void main(){ CWorkerThread wtA("A"); CWorkerThread wtB("B"); wtA.SetPriority(THREAD_PRIORITY_LOWEST); wtB.Suspend(); wtA.WaitForCompletion(); wtB.Resume(); wtB.WaitForCompletion(); cout<<"Both threads complete."<<endl; getchar(); }