Semaphore.TryOpenExisting Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Abre um semáforo nomeado especificado, se já existir, e devolve um valor que indica se a operação teve sucesso.
Sobrecargas
| Name | Description |
|---|---|
| TryOpenExisting(String, Semaphore) |
Abre o semáforo nomeado especificado, se este já existir, e devolve um valor que indica se a operação teve sucesso. |
| TryOpenExisting(String, SemaphoreRights, Semaphore) |
Abre o semáforo nomeado especificado, se já existir, com o acesso de segurança desejado, e devolve um valor que indica se a operação teve sucesso. |
TryOpenExisting(String, Semaphore)
Abre o semáforo nomeado especificado, se este já existir, e devolve um valor que indica se a operação teve sucesso.
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 partilhado com outros processos. O nome é sensível a maiúsculas e minúsculas. O carácter de barra inversa (\) é reservado e só pode ser usado para especificar um namespace. Para mais informações sobre namespaces, consulte a secção de observações. Podem existir restrições adicionais quanto ao nome, dependendo do sistema operativo. Por exemplo, em sistemas operativos baseados em Unix, o nome após excluir o espaço de nomes deve ser um nome de ficheiro válido.
- result
- Semaphore
Quando este método retorna, contém um Semaphore objeto que representa o semáforo nomeado caso a chamada tenha tido sucesso, ou null se a chamada tenha falhado. Este parâmetro é tratado como não inicializado.
Devoluções
true se o semáforo nomeado fosse aberto com sucesso; caso contrário, false. Em alguns casos, false pode ser devolvido por nomes inválidos.
Exceções
name é uma corda vazia.
-ou-
.NET Framework apenas: name é mais longo que MAX_PATH (260 caracteres).
name é null.
name é inválido. Isto pode dever-se a várias razões, incluindo algumas restrições que podem ser impostas pelo sistema operativo, como um prefixo desconhecido ou caracteres inválidos. Note que o nome e os prefixos comuns "Global\" e "Local\" são sensíveis a maiúsculas minúsculas. Para alguns nomes inválidos, o método pode ser retornado false em vez disso.
-ou-
Houve outro erro. A HResult propriedade pode fornecer mais informações.
O name é demasiado longo. As restrições de comprimento podem depender do sistema operativo ou da configuração.
O semáforo nomeado existe, mas o utilizador não tem o acesso de segurança necessário para o utilizar.
Observações
Podem name ser precedidos por Global\ ou Local\ para especificar um namespace. Quando o Global namespace é especificado, o objeto de sincronização pode ser partilhado com quaisquer processos no sistema. Quando o Local namespace é especificado, que é também o padrão quando não há namespace especificado, o objeto de sincronização pode ser partilhado com processos na mesma sessão. No Windows, uma sessão é uma sessão de login, e os serviços normalmente correm numa sessão diferente e não interativa. Em sistemas operativos do tipo Unix, cada shell tem a sua própria sessão. Os objetos de sincronização local da sessão podem ser apropriados para sincronizar entre processos com uma relação pai/filho, onde todos correm na mesma sessão. Para mais informações sobre nomes de objetos de sincronização no Windows, veja Object Names.
Se existir um objeto de sincronização do tipo solicitado no namespace, o objeto de sincronização existente é aberto. Se um objeto de sincronização não existir no namespace, ou se existir um objeto de sincronização de outro tipo no namespace, false é devolvido.
Para criar o semáforo do sistema quando este ainda não existe, use um dos Semaphore construtores que tenha um name parâmetro.
Se não tiver a certeza se existe um semáforo nomeado, use esta sobrecarga de métodos em vez da OpenExisting(String) sobrecarga de método, que cria uma exceção se o semáforo não existir.
Esta sobrecarga de métodos é equivalente a chamar o TryOpenExisting método overload e especificar SemaphoreRights.Synchronize e os direitos SemaphoreRights.Modify , combinados usando a operação OR bit a bit. Especificar o SemaphoreRights.Synchronize flag permite que um thread entre no semáforo, e especificar o SemaphoreRights.Modify flag 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 devolve um valor que indica se a operação teve sucesso.
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 partilhado com outros processos. O nome é sensível a maiúsculas e minúsculas. O carácter de barra inversa (\) é reservado e só pode ser usado para especificar um namespace. Para mais informações sobre namespaces, consulte a secção de observações. Podem existir restrições adicionais quanto ao nome, dependendo do sistema operativo. Por exemplo, em sistemas operativos baseados em Unix, o nome após excluir o espaço de nomes deve ser um nome de ficheiro 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 este método retorna, contém um Semaphore objeto que representa o semáforo nomeado caso a chamada tenha tido sucesso, ou null se a chamada tenha falhado. Este parâmetro é tratado como não inicializado.
Devoluções
true se o semáforo nomeado fosse aberto com sucesso; caso contrário, false. Em alguns casos, false pode ser devolvido por nomes inválidos.
Exceções
name é uma corda vazia.
-ou-
.NET Framework apenas: name é mais longo que MAX_PATH (260 caracteres).
name é null.
name é inválido. Isto pode dever-se a várias razões, incluindo algumas restrições que podem ser impostas pelo sistema operativo, como um prefixo desconhecido ou caracteres inválidos. Note que o nome e os prefixos comuns "Global\" e "Local\" são sensíveis a maiúsculas minúsculas. Para alguns nomes inválidos, o método pode ser retornado false em vez disso.
-ou-
Houve outro erro. A HResult propriedade pode fornecer mais informações.
O name é demasiado longo. As restrições de comprimento podem depender do sistema operativo ou da configuração.
O semáforo nomeado existe, mas o utilizador não tem o acesso de segurança necessário para o utilizar.
Observações
Podem name ser precedidos por Global\ ou Local\ para especificar um namespace. Quando o Global namespace é especificado, o objeto de sincronização pode ser partilhado com quaisquer processos no sistema. Quando o Local namespace é especificado, que é também o padrão quando não há namespace especificado, o objeto de sincronização pode ser partilhado com processos na mesma sessão. No Windows, uma sessão é uma sessão de login, e os serviços normalmente correm numa sessão diferente e não interativa. Em sistemas operativos do tipo Unix, cada shell tem a sua própria sessão. Os objetos de sincronização local da sessão podem ser apropriados para sincronizar entre processos com uma relação pai/filho, onde todos correm na mesma sessão. Para mais informações sobre nomes de objetos de sincronização no Windows, veja Object Names.
Se existir um objeto de sincronização do tipo solicitado no namespace, o objeto de sincronização existente é aberto. Se um objeto de sincronização não existir no namespace, ou se existir um objeto de sincronização de outro tipo no namespace, false é devolvido.
Para criar o semáforo do sistema quando este ainda não existe, use um dos Semaphore construtores que tenha um name parâmetro.
Se não tiver a certeza se existe um semáforo nomeado, use esta sobrecarga de métodos em vez da OpenExisting(String, SemaphoreRights) sobrecarga de método, que cria uma exceção se o semáforo não existir.
O rights parâmetro deve incluir a SemaphoreRights.Synchronize flag para permitir que as threads entrem no semáforo, e a SemaphoreRights.Modify flag para permitir que as threads chamem o Release método.
Múltiplas chamadas a este método que usam o mesmo valor para name não retornam necessariamente o mesmo Semaphore objeto, embora os objetos que são devolvidos representem o mesmo semáforo do sistema com o mesmo nome.