// windows_41_Thread_Semaphore.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "windows.h"/*效果:前面很快出五个,后面一秒出一个*///1、创建信号量//CreateSemaphore//2、等候信号量//WaitForSingleObject//WaitForMultipleObjects//3、释放信号//ReleaseSemaphore//4、关闭信号量//CloseHandleHANDLE g_hSemaphore = NULL;//输入1或者5发送1或者5个信号量DWORD WINAPI ThreadSend3( LPVOID pParam ){while (true){//3、释放信号//ReleaseSemaphoreSleep( 1000 );CHAR ch = getchar( );switch (ch){case ‘1‘://释放信号ReleaseSemaphore( g_hSemaphore, 1, NULL );break;case ‘5‘:ReleaseSemaphore( g_hSemaphore, 5, NULL );break;}}return 0;}DWORD WINAPI ThreadSend( LPVOID pParam ){while (true){//3、释放信号//ReleaseSemaphoreReleaseSemaphore( g_hSemaphore, 1, NULL );Sleep( 1000 );}return 0;}DWORD WINAPI ThreadRecv( LPVOID pParam ){while (true){WaitForSingleObject( g_hSemaphore, INFINITE );printf( "Hello Semaphore\n" );Sleep( 100 );}return 0;}void Create( ){DWORD nThreadID = 0;HANDLE hThread[2] = { 0 };hThread[0] = CreateThread( NULL, 0, ThreadSend, NULL, 0 ,&nThreadID);hThread[1] = CreateThread( NULL, 0, ThreadRecv, NULL, 0 ,&nThreadID);// 等候两个线程的结束WaitForMultipleObjects( 2, hThread, TRUE, INFINITE );}int _tmain(int argc, _TCHAR* argv[]){//1、创建信号量//CreateSemaphoreg_hSemaphore = CreateSemaphore( NULL, 5, 10, NULL );Create( );//4、关闭信号量//CloseHandleCloseHandle( g_hSemaphore );return 0;}
41 windows_41_Thread_Semaphore 线程 - 信号
原文:http://www.cnblogs.com/nfking/p/5574191.html