首页 > 代码库 > windows系统调用 调度优先级

windows系统调用 调度优先级

 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\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."<<endl;
67 
68     getchar();
69 }