1 #include "iostream" 2 #include "windows.h" 3 using namespace std; 4 5 class CWorkerThread{ 6 public: 7 CWorkerThread(LPCTSTR m_szName):m_szName(m_szName),m_hThread(INVALID_HANDLE_VALUE){ 8 m_hThread=CreateThread( 9 NULL,10 0,11 ThreadProc,12 reinterpret_cast(this),13 0,14 NULL15 );16 }17 18 virtual ~CWorkerThread(){CloseHandle(m_hThread);}19 20 virtual void WaitForCompletion(){21 WaitForSingleObject(m_hThread,INFINITE);22 }23 24 virtual void SetPriority(int nPriority){25 SetThreadPriority(m_hThread,nPriority); 26 }27 28 virtual void Suspend(){29 SuspendThread(m_hThread);30 }31 32 virtual void Resume(){33 ResumeThread(m_hThread);34 }35 36 protected:37 static DWORD WINAPI ThreadProc(LPVOID lpParam){38 CWorkerThread *pThis=39 reinterpret_cast (lpParam);40 41 pThis->DoStuff();42 return (0);43 }44 45 virtual void DoStuff(){46 for(int n=0;n<100;n++){47 printf("Thread %s ID:%d,count %d\n",m_szName,GetCurrentThreadId(),n);48 }49 }50 51 protected:52 HANDLE m_hThread;53 LPCTSTR m_szName;54 };55 56 void main(){57 58 CWorkerThread wtB("B");59 CWorkerThread wtA("A");60 wtA.SetPriority(THREAD_PRIORITY_LOWEST);61 62 63 wtA.WaitForCompletion();64 wtB.WaitForCompletion();65 66 cout<<"Both threads complete."<