函数参考


_WinAPI_CreateSemaphore

创建或打开有名或无名的信号量对象.

#Include <WinAPIEx.au3>
_WinAPI_CreateSemaphore ( $sSemaphore, $iInitial, $iMaximum [, $tSecurity] )

参数

$sSemaphore 信号量的名称. 名称比较区分大小写.
$iInitial 信号量对象的初始计数.
该值必须大于或等于 0, 且小于或等于 $iMaximum
$iMaximum 信号量对象的最大数量. 该值必须大于 0.
$tSecurity [可选参数] $tagSECURITY_ATTRIBUTES structure that specifies a security descriptor for the new semaphore.
If this parameter is 0, the semaphore gets a default security descriptor.

返回值

成功: 返回信号量对象的句柄.如命名信号量对象在函数调用前已存在,函数返回现有对象的句柄.
失败: 返回 0,并设置@error标志为非 0 值.

注意/说明

任何进程可以调用 _WinAPI_WaitFor... 函数指定信号量对象句柄.
 单一对象等待函数返回指定对象的状态信号.
 当任一对象或指定对象都是信号时, 多对象等待函数可以返回任何命令.
 当一个等待函数返回时,被释放的等待进程继续执行.
 信号量对象的状态是信号时, 其信号计数大于 0, 如果不是, 其计数等于 0.
 $iInitial 参数指定初始值.每个等待进程因信号量的信号状态的释放使计数减 1.
 使用 _WinAPI_ReleaseSemaphore() 函数指定信号量的递增计数.
 计数不能小于 0 或大于 $iMaximum 参数指定的值.

相关

详情参考

在MSDN中搜索


示例/演示


#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

If Not @Compiled Then
    MsgBox(0, '', 'To run this script, you must first compile it and then run the (.exe) file.')
    Exit
EndIf

Global $hSemaphore = _WinAPI_CreateSemaphore('MySemaphore', 2, 2)

_WinAPI_WaitForSingleObject($hSemaphore)
_MyGUI()
_WinAPI_ReleaseSemaphore($hSemaphore)
_WinAPI_CloseHandle($hSemaphore)

Func _MyGUI()

    Local $Msg

    GUICreate('MyGUI')
    GUISetState()
    While 1
        $Msg = GUIGetMsg()
        Switch $Msg
            Case -3
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>_MyGUI