windows系统调用 semaphore信号量

时间:2014-06-17 14:26:59   收藏:0   阅读:353
 1 #include "iostream"
 2 #include "windows.h"
 3 #include "cstring"
 4 using namespace std;
 5 
 6 HANDLE g_hSemThreads=INVALID_HANDLE_VALUE;
 7 
 8 static DWORD WINAPI ThreadProc(LPVOID lpParam){
 9     LONG nPauseMs=reinterpret_cast<LONG>(lpParam);
10     Sleep(nPauseMs);
11 
12     if(g_hSemThreads!=INVALID_HANDLE_VALUE){
13         LONG nPrevCt(0);
14 
15         if(ReleaseSemaphore(
16             g_hSemThreads,
17             1,
18             &nPrevCt
19             )){
20                 printf("%d msec thread ended ,slots left:%d\n",nPauseMs,nPrevCt+1);
21         }
22     }
23 
24     return(0);
25 }
26 
27 
28 
29 void main(){
30     g_hSemThreads=CreateSemaphore(
31         NULL,
32         5,
33         5,
34         NULL
35         );
36     for(int nTotal=20;nTotal>0;nTotal-=2){
37         WaitForSingleObject(g_hSemThreads,INFINITE);
38         LONG nPauseMs=nTotal*5;
39 
40         HANDLE hThread=CreateThread(
41             NULL,
42             0,
43             ThreadProc,
44             reinterpret_cast<LPVOID>(nPauseMs),
45             0,
46             NULL
47             );
48 
49         printf("in the %d msec a thread is creates \n",nPauseMs);
50         CloseHandle(hThread);
51         hThread=INVALID_HANDLE_VALUE;
52     }
53 
54     CloseHandle(g_hSemThreads);
55     g_hSemThreads=INVALID_HANDLE_VALUE;
56     getchar();
57 }

 

windows系统调用 semaphore信号量,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!