#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();
}