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<LPVOID>(this), 13 0, 14 NULL 15 ); 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<CWorkerThread*>(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 ",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."<<endl; 67 68 getchar(); 69 }