// testSemaphore.cpp : 定义控制台应用程序的入口点。 //参考:http://blog.csdn.net/wangweitingaabbcc/article/details/6833265 #include "stdafx.h" #include<windows.h> // 信号量对象句柄 HANDLE hSemaphore; DWORD WINAPI RunThread(LPVOID lpParameter) { int CardNo = *(int*)(lpParameter); while ( 1 )
{
//INFINITE:永远等待 , 0:不等待, 数值就是多些ms。
WaitForSingleObject(hSemaphore, INFINITE); //等待信号量 printf("aaaaaaaaaaa-%d \n",CardNo); ReleaseSemaphore(hSemaphore, 1, NULL); Sleep(1000); } return 0; } int _tmain(int argc, _TCHAR* argv[]) { int nHandle = 1; hSemaphore = CreateSemaphore(NULL, 0, 1, NULL); unsigned long dwThreadID; ::CreateThread( NULL, 0, &RunThread, &nHandle, 0, &dwThreadID ); Sleep(1000); ReleaseSemaphore(hSemaphore, 1, NULL); getchar(); return 0;
}
解释:
HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // 安全属性指针 LONG lInitialCount, // 初始计数 LONG lMaximumCount, // 最大计数 LPCTSTR lpName // 对象名指针 ); //创建信号量
BOOL ReleaseSemaphore( HANDLE hSemaphore, // 信号量句柄 LONG lReleaseCount, // 计数递增数量 LPLONG lpPreviousCount // 先前计数 ); //释放信号量