多線程7 信號量

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"

#define Max_Set_Count 6
#define THREADCOUNT 12

HANDLE hSemaphore;

DWORD WINAPI func(LPVOID)
{
    BOOL bContinue = TRUE;
 while(bContinue)
 {
  DWORD result = WaitForSingleObject(hSemaphore,3L);
  switch(result)
  {
  case WAIT_OBJECT_0:
   printf("Thread %d:wait succeed\n",GetCurrentThreadId());
   bContinue = false;
   Sleep(5);
   if(!ReleaseSemaphore(hSemaphore,1,NULL))
   {
    printf("ReleaseSemaphore error:%d\n",GetLastError());
   }
   break;
  case WAIT_TIMEOUT:
   printf("Thread %d:wait time out\n",GetCurrentThreadId());
   break;
  }
 }
 return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
 HANDLE aThread[THREADCOUNT];
 hSemaphore = CreateSemaphore(NULL,Max_Set_Count,Max_Set_Count,NULL);
 if(hSemaphore == NULL)
 {
  printf("Create Semaphore error:%d\n",GetLastError());
  return 0;
 }
 for(int i =0;i<THREADCOUNT;i++)
 {
  aThread[i] = CreateThread(NULL,0,func,NULL,0,NULL);
  if(aThread[i] == NULL)
  {
   printf("CreateThread error:%d\n",GetLastError());
  }
 }
 WaitForMultipleObjects(THREADCOUNT,aThread,true,INFINITE);
 for(int i=0;i<THREADCOUNT;i++)
 {
  CloseHandle(aThread[i]);
 }
 CloseHandle(hSemaphore);
 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章