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