Semaphore.TryOpenExisting 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。
重载
TryOpenExisting(String, Semaphore) |
打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。 |
TryOpenExisting(String, SemaphoreRights, Semaphore) |
用安全访问权限打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。 |
TryOpenExisting(String, Semaphore)
打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。
public:
static bool TryOpenExisting(System::String ^ name, [Runtime::InteropServices::Out] System::Threading::Semaphore ^ % result);
public static bool TryOpenExisting (string name, out System.Threading.Semaphore result);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static bool TryOpenExisting (string name, out System.Threading.Semaphore? result);
public static bool TryOpenExisting (string name, out System.Threading.Semaphore? result);
static member TryOpenExisting : string * Semaphore -> bool
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member TryOpenExisting : string * Semaphore -> bool
Public Shared Function TryOpenExisting (name As String, ByRef result As Semaphore) As Boolean
参数
- name
- String
要与其他进程共享的同步对象的名称。 该名称区分大小写。
返回
如果命名信号量成功打开,则为 true
;否则为 false
。 在某些情况下,对于无效名称,可能会返回 false
。
- 属性
例外
name
上声明的默认值为 null
。
name
无效。 导致这种情况的原因有很多,包括操作系统可能会施加的一些限制,例如未知前缀或无效字符。 请注意,名称和常见前缀 "Global" 和 "Local" 区分大小写。 对于某些无效名称,该方法可能返回 false
。
或
还有其他错误。 HResult
属性可能提供更多信息。
name
太长。 长度限制可能取决于操作系统或配置。
存在该命名信号量,但用户没有使用它时所需的安全访问权限。
注解
该 name
前缀可能带有 Global\
或 Local\
指定命名空间。 Global
指定命名空间后,同步对象可以与系统上的任何进程共享。 Local
指定命名空间时,这也是未指定命名空间时的默认命名空间,同步对象可以与同一会话中的进程共享。 在Windows,会话是登录会话,服务通常在不同的非交互式会话中运行。 在类似于 Unix 的操作系统上,每个 shell 都有自己的会话。 会话本地同步对象可能适合在进程与父/子关系之间同步,它们都在同一会话中运行。 有关Windows同步对象名称的详细信息,请参阅对象名称。
如果命名空间中存在所请求类型的同步对象,则会打开现有同步对象。 如果命名空间中不存在同步对象,或者命名空间中存在不同类型的同步对象, false
则返回该对象。
若要在系统信号灯尚不存在时创建系统信号灯,请使用具有参数的 Semaphore 构造函数之一 name
。
如果不确定命名信号灯是否存在,请使用此方法重载而不是 OpenExisting(String) 方法重载,如果信号灯不存在,则会引发异常。
此方法重载等效于使用按位 OR 操作调用 TryOpenExisting 方法重载和指定 SemaphoreRights.Synchronize 和 SemaphoreRights.Modify 权限。 指定 SemaphoreRights.Synchronize 标志允许线程进入信号灯,并指定 SemaphoreRights.Modify 标志允许线程调用 Release 该方法。
适用于
TryOpenExisting(String, SemaphoreRights, Semaphore)
用安全访问权限打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。
public:
static bool TryOpenExisting(System::String ^ name, System::Security::AccessControl::SemaphoreRights rights, [Runtime::InteropServices::Out] System::Threading::Semaphore ^ % result);
public static bool TryOpenExisting (string name, System.Security.AccessControl.SemaphoreRights rights, out System.Threading.Semaphore result);
static member TryOpenExisting : string * System.Security.AccessControl.SemaphoreRights * Semaphore -> bool
Public Shared Function TryOpenExisting (name As String, rights As SemaphoreRights, ByRef result As Semaphore) As Boolean
参数
- name
- String
要与其他进程共享的同步对象的名称。 该名称区分大小写。
- rights
- SemaphoreRights
表示所需的安全访问权限的枚举值的按位组合。
返回
如果命名信号量成功打开,则为 true
;否则为 false
。 在某些情况下,对于无效名称,可能会返回 false
。
例外
name
上声明的默认值为 null
。
name
无效。 导致这种情况的原因有很多,包括操作系统可能会施加的一些限制,例如未知前缀或无效字符。 请注意,名称和常见前缀 "Global" 和 "Local" 区分大小写。 对于某些无效名称,该方法可能返回 false
。
或
还有其他错误。 HResult
属性可能提供更多信息。
name
太长。 长度限制可能取决于操作系统或配置。
存在该命名信号量,但用户没有使用它时所需的安全访问权限。
注解
name
可以是前缀Global\``Local\
,也可以指定命名空间。 Global
指定命名空间时,同步对象可以与系统上的任何进程共享。 Local
指定命名空间时,该命名空间也是未指定命名空间时的默认值,同步对象可以与同一会话中的进程共享。 在Windows,会话是登录会话,服务通常在不同的非交互式会话中运行。 在类似 Unix 的操作系统上,每个 shell 都有其自己的会话。 会话本地同步对象可能适合在进程与父/子关系之间同步,它们都在同一会话中运行。 有关Windows上的同步对象名称的详细信息,请参阅对象名称。
如果命名空间中存在所请求类型的同步对象,则会打开现有同步对象。 如果命名空间中不存在同步对象,或者命名空间中存在不同类型的同步对象, false
则返回该对象。
若要在系统信号灯尚不存在时创建系统信号灯,请使用具有参数的 Semaphore 构造函数之一 name
。
如果不确定命名信号灯是否存在,请使用此方法重载而不是 OpenExisting(String, SemaphoreRights) 方法重载,如果信号灯不存在,则会引发异常。
该 rights
参数必须包含标志 SemaphoreRights.Synchronize 以允许线程输入信号灯,以及 SemaphoreRights.Modify 允许线程调用该方法的 Release 标志。
对此方法使用相同值的 name
多次调用不一定返回相同的 Semaphore 对象,即使返回的对象表示同一命名的系统信号量。