Semaphore.TryOpenExisting Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Abre um semáforo nomeado especificado, se já existir, e retorna um valor que indica se a operação foi bem-sucedida.
Sobrecargas
| Nome | Description |
|---|---|
| TryOpenExisting(String, Semaphore) |
Abre o semáforo nomeado especificado, se já existir, e retorna um valor que indica se a operação foi bem-sucedida. |
| TryOpenExisting(String, SemaphoreRights, Semaphore) |
Abre o semáforo nomeado especificado, se já existir, com o acesso de segurança desejado e retorna um valor que indica se a operação foi bem-sucedida. |
TryOpenExisting(String, Semaphore)
Abre o semáforo nomeado especificado, se já existir, e retorna um valor que indica se a operação foi bem-sucedida.
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);
static member TryOpenExisting : string * Semaphore -> bool
Public Shared Function TryOpenExisting (name As String, ByRef result As Semaphore) As Boolean
Parâmetros
- name
- String
O nome do objeto de sincronização a ser compartilhado com outros processos. O nome diferencia maiúsculas de minúsculas. O caractere de barra invertida (\) é reservado e só pode ser usado para especificar um namespace. Para obter mais informações sobre namespaces, consulte a seção comentários. Pode haver mais restrições ao nome dependendo do sistema operacional. Por exemplo, em sistemas operacionais baseados em Unix, o nome após a exclusão do namespace deve ser um nome de arquivo válido.
- result
- Semaphore
Quando esse método é retornado, contém um Semaphore objeto que representa o semáforo nomeado se a chamada foi bem-sucedida ou null se a chamada falhou. Esse parâmetro é tratado como não inicializado.
Retornos
true se o semáforo nomeado foi aberto com êxito; caso contrário, false. Em alguns casos, false pode ser retornado para nomes inválidos.
Exceções
name é uma cadeia de caracteres vazia.
-ou-
.NET Framework somente: name é maior que MAX_PATH (260 caracteres).
name é null.
name é inválido. Isso pode ser por vários motivos, incluindo algumas restrições que podem ser colocadas pelo sistema operacional, como um prefixo desconhecido ou caracteres inválidos. Observe que o nome e os prefixos comuns "Global\" e "Local\" diferenciam maiúsculas de minúsculas. Para alguns nomes inválidos, o método pode retornar false em vez disso.
-ou-
Houve outro erro. A HResult propriedade pode fornecer mais informações.
O name é muito longo. As restrições de comprimento podem depender do sistema operacional ou da configuração.
O semáforo nomeado existe, mas o usuário não tem o acesso de segurança necessário para usá-lo.
Comentários
Pode name ser prefixado com Global\ ou Local\ para especificar um namespace. Quando o Global namespace é especificado, o objeto de sincronização pode ser compartilhado com todos os processos no sistema. Quando o Local namespace é especificado, que também é o padrão quando nenhum namespace é especificado, o objeto de sincronização pode ser compartilhado com processos na mesma sessão. No Windows, uma sessão é uma sessão de logon e os serviços normalmente são executados em uma sessão não interativa diferente. Em sistemas operacionais semelhantes ao Unix, cada shell tem sua própria sessão. Os objetos de sincronização local de sessão podem ser apropriados para sincronizar entre processos com uma relação pai/filho em que todos eles são executados na mesma sessão. Para obter mais informações sobre nomes de objetos de sincronização no Windows, consulte Object Names.
Se houver um objeto de sincronização do tipo solicitado no namespace, o objeto de sincronização existente será aberto. Se um objeto de sincronização não existir no namespace ou um objeto de sincronização de um tipo diferente existir no namespace, false será retornado.
Para criar o semáforo do sistema quando ele ainda não existir, use um dos Semaphore construtores que tem um name parâmetro.
Se você não tiver certeza se existe um semáforo nomeado, use essa sobrecarga de método em vez da sobrecarga do método, o OpenExisting(String) que gerará uma exceção se o semáforo não existir.
Essa sobrecarga de método é equivalente a chamar a sobrecarga e a especificação TryOpenExisting e SemaphoreRights.Synchronize os direitos do SemaphoreRights.Modify método, combinados usando a operação OR bit a bit. Especificar o SemaphoreRights.Synchronize sinalizador permite que um thread insira o semáforo e especificar o SemaphoreRights.Modify sinalizador permite que um thread chame o Release método.
Aplica-se a
TryOpenExisting(String, SemaphoreRights, Semaphore)
Abre o semáforo nomeado especificado, se já existir, com o acesso de segurança desejado e retorna um valor que indica se a operação foi bem-sucedida.
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
Parâmetros
- name
- String
O nome do objeto de sincronização a ser compartilhado com outros processos. O nome diferencia maiúsculas de minúsculas. O caractere de barra invertida (\) é reservado e só pode ser usado para especificar um namespace. Para obter mais informações sobre namespaces, consulte a seção comentários. Pode haver mais restrições ao nome dependendo do sistema operacional. Por exemplo, em sistemas operacionais baseados em Unix, o nome após a exclusão do namespace deve ser um nome de arquivo válido.
- rights
- SemaphoreRights
Uma combinação bit a bit dos valores de enumeração que representam o acesso de segurança desejado.
- result
- Semaphore
Quando esse método é retornado, contém um Semaphore objeto que representa o semáforo nomeado se a chamada foi bem-sucedida ou null se a chamada falhou. Esse parâmetro é tratado como não inicializado.
Retornos
true se o semáforo nomeado foi aberto com êxito; caso contrário, false. Em alguns casos, false pode ser retornado para nomes inválidos.
Exceções
name é uma cadeia de caracteres vazia.
-ou-
.NET Framework somente: name é maior que MAX_PATH (260 caracteres).
name é null.
name é inválido. Isso pode ser por vários motivos, incluindo algumas restrições que podem ser colocadas pelo sistema operacional, como um prefixo desconhecido ou caracteres inválidos. Observe que o nome e os prefixos comuns "Global\" e "Local\" diferenciam maiúsculas de minúsculas. Para alguns nomes inválidos, o método pode retornar false em vez disso.
-ou-
Houve outro erro. A HResult propriedade pode fornecer mais informações.
O name é muito longo. As restrições de comprimento podem depender do sistema operacional ou da configuração.
O semáforo nomeado existe, mas o usuário não tem o acesso de segurança necessário para usá-lo.
Comentários
Pode name ser prefixado com Global\ ou Local\ para especificar um namespace. Quando o Global namespace é especificado, o objeto de sincronização pode ser compartilhado com todos os processos no sistema. Quando o Local namespace é especificado, que também é o padrão quando nenhum namespace é especificado, o objeto de sincronização pode ser compartilhado com processos na mesma sessão. No Windows, uma sessão é uma sessão de logon e os serviços normalmente são executados em uma sessão não interativa diferente. Em sistemas operacionais semelhantes ao Unix, cada shell tem sua própria sessão. Os objetos de sincronização local de sessão podem ser apropriados para sincronizar entre processos com uma relação pai/filho em que todos eles são executados na mesma sessão. Para obter mais informações sobre nomes de objetos de sincronização no Windows, consulte Object Names.
Se houver um objeto de sincronização do tipo solicitado no namespace, o objeto de sincronização existente será aberto. Se um objeto de sincronização não existir no namespace ou um objeto de sincronização de um tipo diferente existir no namespace, false será retornado.
Para criar o semáforo do sistema quando ele ainda não existir, use um dos Semaphore construtores que tem um name parâmetro.
Se você não tiver certeza se existe um semáforo nomeado, use essa sobrecarga de método em vez da sobrecarga do método, o OpenExisting(String, SemaphoreRights) que gerará uma exceção se o semáforo não existir.
O rights parâmetro deve incluir o SemaphoreRights.Synchronize sinalizador para permitir que os threads insiram o semáforo e o SemaphoreRights.Modify sinalizador para permitir que os threads chamem o Release método.
Várias chamadas para esse método que usam o mesmo valor name não retornam necessariamente o mesmo Semaphore objeto, mesmo que os objetos retornados representem o mesmo semáforo do sistema nomeado.