Semaphore.TryOpenExisting Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Открывает заданный именованный семафор, если он уже существует, и возвращает значение, указывающее, успешно ли выполнена операция.
Перегрузки
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
Имя объекта синхронизации, который должен использоваться совместно с другими процессами. Имя указано с учетом регистра.
- result
- Semaphore
При возврате этот метод содержит объект Semaphore, представляющий именованный семафор, если вызов завершился успешно, или значение null
, если вызов завершился неудачно. Этот параметр обрабатывается как неинициализированный.
Возвращаемое значение
Значение true
, если именованный семафор был успешно открыт; в противном случае — значение false
. В некоторых случаях false
может быть возвращено недопустимое имя.
- Атрибуты
Исключения
Параметр name
равен пустой строке.
- или -
Только в .NET Framework. name
превышает значение MAX_PATH (260 символов).
name
имеет значение null
.
name
недопустим. Это исключение может возникнуть по разным причинам, включая некоторые ограничения, установленные операционной системой (например, в отношении использования неизвестных префиксов или недопустимых символов). Обратите внимание, что в имени и в стандартных префиксах "Global" и "Local" учитывается регистр. Для некоторых недопустимых имен метод может возвращать false
.
- или -
Произошла другая ошибка. Дополнительные сведения можно получить с помощью свойства HResult
.
Слишком длинное значение name
. Ограничения длины могут зависеть от операционной системы или конфигурации.
Именованный семафор существует, но у пользователя нет прав доступа, необходимых для его использования.
Комментарии
Может name
иметь префикс или Global\
Local\
указать пространство имен. При указании Global
пространства имен объект синхронизации может совместно использоваться с любыми процессами в системе. Local
Если указано пространство имен, которое также является значением по умолчанию, если пространство имен не указано, объект синхронизации может совместно использоваться процессами в одном сеансе. В Windows сеанс является сеансом входа, а службы обычно выполняются в другом неинтерактивном сеансе. В операционных системах под управлением Unix каждая оболочка имеет свой собственный сеанс. Объекты локальной синхронизации сеанса могут быть подходящими для синхронизации между процессами с отношением "родители-потомки", где все они выполняются в одном сеансе. Дополнительные сведения об именах объектов синхронизации в Windows см. в разделе "Имена объектов".
Если объект синхронизации запрошенного типа существует в пространстве имен, открывается существующий объект синхронизации. Если объект синхронизации не существует в пространстве имен или объект синхронизации другого типа существует в пространстве имен, false
возвращается.
Чтобы создать системный семафор, если он еще не существует, используйте один из Semaphore конструкторов с параметром name
.
Если вы не уверены, существует ли именованный семафор, используйте эту перегрузку метода вместо OpenExisting(String) перегрузки метода, которая вызывает исключение, если семафор не существует.
Эта перегрузка метода эквивалентна вызову перегрузки TryOpenExisting метода и указанию SemaphoreRights.Synchronize и SemaphoreRights.Modify правам, объединенным с помощью побитовой операции OR. Указание флага 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
Битовая комбинация значений перечисления, которые определяют желаемые права доступа.
- result
- Semaphore
При возврате этот метод содержит объект Semaphore , представляющий именованный семафор, если вызов завершился успешно, или значение null
, если вызов завершился неудачно. Этот параметр обрабатывается как неинициализированный.
Возвращаемое значение
Значение true
, если именованный семафор был успешно открыт; в противном случае — значение false
. В некоторых случаях false
может быть возвращено недопустимое имя.
Исключения
Параметр name
равен пустой строке.
- или -
Только в .NET Framework. name
превышает значение MAX_PATH (260 символов).
name
имеет значение null
.
name
недопустим. Это исключение может возникнуть по разным причинам, включая некоторые ограничения, установленные операционной системой (например, в отношении использования неизвестных префиксов или недопустимых символов). Обратите внимание, что в имени и в стандартных префиксах "Global" и "Local" учитывается регистр. Для некоторых недопустимых имен метод может возвращать false
.
- или -
Произошла другая ошибка. Дополнительные сведения можно получить с помощью свойства HResult
.
Слишком длинное значение name
. Ограничения длины могут зависеть от операционной системы или конфигурации.
Именованный семафор существует, но у пользователя нет прав доступа, необходимых для его использования.
Комментарии
Может name
иметь префикс или Global\
Local\
указать пространство имен. При указании Global
пространства имен объект синхронизации может совместно использоваться с любыми процессами в системе. Local
Если указано пространство имен, которое также является значением по умолчанию, если пространство имен не указано, объект синхронизации может совместно использоваться процессами в одном сеансе. В Windows сеанс является сеансом входа, а службы обычно выполняются в другом неинтерактивном сеансе. В операционных системах под управлением Unix каждая оболочка имеет свой собственный сеанс. Объекты локальной синхронизации сеанса могут быть подходящими для синхронизации между процессами с отношением "родители-потомки", где все они выполняются в одном сеансе. Дополнительные сведения об именах объектов синхронизации в Windows см. в разделе "Имена объектов".
Если объект синхронизации запрошенного типа существует в пространстве имен, открывается существующий объект синхронизации. Если объект синхронизации не существует в пространстве имен или объект синхронизации другого типа существует в пространстве имен, false
возвращается.
Чтобы создать системный семафор, если он еще не существует, используйте один из Semaphore конструкторов с параметром name
.
Если вы не уверены, существует ли именованный семафор, используйте эту перегрузку метода вместо OpenExisting(String, SemaphoreRights) перегрузки метода, которая вызывает исключение, если семафор не существует.
Параметр rights
должен включать SemaphoreRights.Synchronize флаг, позволяющий потокам входить в семафор, и SemaphoreRights.Modify флаг, позволяющий потокам вызывать Release метод.
Несколько вызовов этого метода, использующих одно и то же значение, name
не обязательно возвращают один и тот же Semaphore объект, даже если возвращаемые объекты представляют один и тот же именованный системный семафор.