CreateSemaphore

This function creates a named or unnamed semaphore object.

HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCTSTR lpName
);

说明
创建一个新的信号机

返回值
Long,如执行成功,返回信号机对象的句柄;零表示出错。
会设置GetLastError。即使返回一个有效的句柄,但倘若它指出同名的一个信号机已经存在,
那么GetLastError也会返回ERROR_ALREADY_EXISTS

参数表
参数 类型及说明
lpSemaphoreAttributes
SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,
或传递零值(将参数声明为ByVal As Long,并传递零值)—— 表示采用不允许继承的默认描述符。
该参数定义了信号机的安全特性

lInitialCount Long,设置信号机的初始计数。
可设置零到lMaximumCount之间的一个值 lMaximumCount Long,设置信号机的最大计数

lpName String,指定信号机对象的名称。
用vbNullString可创建一个未命名的信号机对象。
如果已经存在拥有这个名字的一个信号机,就直接打开现成的信号机。
这个名字可能不与一个现有的互斥体、事件、可等待计时器或文件映射的名称相符

注解
一旦不再需要,一定记住用CloseHandle关闭信号机的句柄。
它的所有句柄都关闭以后,对象自己也会删除
一旦值大于零,信号机就会触发(发出信号)。
ReleaseSemaphore函数的作用是增加信号机的计数。
如果成功,就调用信号机上的一个等待函数来减少它的计数

一旦不再需要,一定记住用 CloseHandle 关闭信号机的句柄。 >> 嗯,真郁闷,MSDN真该看看了,该死的。

不过,很开心,Ardy 找出来了。

原文地址:https://www.cnblogs.com/answer/p/1445003.html