信号量
 相关问题
 类似于事件(作用类似),解决通知的相关问题。但提供一个计数器,可以设置次数。
 信号量的使用
 1.创建信号量
 HANDLE CreateSemaphore(
 LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,//参数作废,基本用NULL
 LONG lInitialCount,//初始化信号量数量,每碰到一次WaitFor…时,数量减1,当为0时产生阻塞
 LONG lMaxximumCount,//信号量的量大值
 LPCTSTR lpName //命名
 ); //创建成功返回信号量句柄
 2.等候信号量
 WaitForSingleObject/WaitForMulitipuleObjects
 每等候通过一次,信号量的信号减1,直到为0阻塞
 3.给信号量指定计数值
 BOOL ReleaseSemaphore(
 HANDLE hSemaphore,//信号量句柄
 LONG lReleaseCount,//释放数量
 LPLONG lpPreviousCount//释放前原来信号量的数量,可以设置为NULL (在设置信号量次数之前,目前还剩余的计数值);
 4.关闭句柄
 ColseHandle
#include <Windows.h>
#include <stdio.h>
DWORD g_nCount = 0;
HANDLE g_hSemaphore = 0;
DWORD CALLBACK TestProc(LPVOID lpParam)
{
	while(1)
	{
		WaitForSingleObject(g_hSemaphore,INFINITE);
		printf("print--------------%d\n",g_nCount++);
	}
	return 0;
}
int main()
{
	DWORD nID = 0;
	g_hSemaphore = CreateSemaphore(NULL,3,10,NULL);
	HANDLE hThread = CreateThread(NULL,0,TestProc,NULL,0,&nID);
	
	system("pause");
	//每按一次任一键,然后给信号量赋值10,让我们的TestProc线程继续执行。
	while(1)
	{
		system("pause"); 
		ReleaseSemaphore(g_hSemaphore,10,NULL); //将信号量设置为0
	}
	WaitForSingleObject(hThread,INFINITE);
	
	return 0;
}
以上代码是用主进程控制新创建线程,用信号量来控制新创建线程
 









![[附源码]Python计算机毕业设计高校教材网上征订系统](https://img-blog.csdnimg.cn/5dc8be79f0fc4997b53ebd4fa5f77014.png)








