|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 |
#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();} |
windows系统调用 线程 启动与挂起,布布扣,bubuko.com
原文:http://www.cnblogs.com/593213556wuyubao/p/3781458.html