滴水 2.27 --信号量


image
CloseHandle() 信号量的清理
ReleaseSemaphore 函数用于对指定的信号量增加指定的值。
image

点击查看代码
#include "stdafx.h"
HANDLE hSemaphore;
HANDLE hThread[3];
HWND hEditSet;

DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
	TCHAR szBuffer[10];
	DWORD dwTimmer = 0;
	WaitForSingleObject(hSemaphore, INFINITE);
	while (dwTimmer < 100)
	{
		printf("线程 1现抢红包值:%d\n", dwTimmer);
		Sleep(100);
		
		dwTimmer++;
	}
	
	ReleaseSemaphore(hSemaphore, 1, NULL);
	return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{
	TCHAR szBuffer[10];
	DWORD dwTimmer = 0;
	WaitForSingleObject(hSemaphore, INFINITE);
	while (dwTimmer < 100)
	{
		printf("线程 2 现抢红包值:%d\n", dwTimmer);
		Sleep(100);

		dwTimmer++;
	}
	ReleaseSemaphore(hSemaphore, 1, NULL);
	return 0;
}
DWORD WINAPI ThreadProc3(LPVOID lpParameter)
{
	TCHAR szBuffer[10];
	DWORD dwTimmer = 0;
	WaitForSingleObject(hSemaphore, INFINITE);
	while (dwTimmer < 100)
	{
		printf("线程 3 现抢红包值:%d\n", dwTimmer);
		Sleep(100);

		dwTimmer++;
	}
	ReleaseSemaphore(hSemaphore, 1, NULL);
	return 0;
}
DWORD WINAPI ThreadBegin(LPVOID lpParameter)
{

	
	int dwMoney = 0;
	//创建信号量			
	hSemaphore = CreateSemaphore(NULL, 0, 3, NULL);
	//线程创建			
	hThread[0] = ::CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL);
	hThread[1] = ::CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL);
	hThread[2] = ::CreateThread(NULL, 0, ThreadProc3, NULL, 0, NULL);
	//开始准备红包			
	while (dwMoney < 1000)
	{
		
		dwMoney++;
		
	}
	printf("红包值:%d", dwMoney);
	ReleaseSemaphore(hSemaphore, 2, NULL);
	::WaitForMultipleObjects(3, hThread, TRUE, INFINITE);
	::CloseHandle(hSemaphore);
	return 0;
}

int main(int argc, char* argv[])
{

	int i = 1000;



	HANDLE hThread = ::CreateThread(NULL, 0, ThreadBegin,
		NULL, 0, NULL);



	while (1)
	{
		Sleep(5000);
	}
	return 0;
}




posted @ 2023-02-27 18:36  逆向狗  阅读(48)  评论(0)    收藏  举报