Ir para conteúdo
Fórum Script Brasil
  • 0

O Programa Não Executar Várias Vezes


an_cp

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0

Crie um Mutex no seu .dpr:

var hMutex:THandle;
begin
  hMutex := 0;
  try
    hMutex := CreateMutex(nil, true, 'Só Chama uma vez');
    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      ShowMessage('xxx.exe Já Está em Execução !');
      CloseHandle(hMutex);
    end
    else
    begin
      Application.Initialize;
      Application.CreateForm(...);
      Application.Run;
    end;
  finally
    ReleaseMutex(hMutex);
  end;
end.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Paulo, bom mutex siginifica mutual exclusive; são objetos de exclusividade mútua e são muito utilizados em sincronismo de processos. O Windows os disponibiliza na api kernel32. Por ex, você pode criar várias threads em seu programa e querer que elas sejam executadas em série(uma após a outra) e não concorrentemente; para isto você pode utilizar esses objetos.

O segundo parâmetro de CreateMutex diz p/ pegar a posse do objeto, se ele retorna Ok, então você terá certeza que nenhum outro processo está utilizando esse objeto; quando do segundo em diante tentar pegar a posse do objeto, a função CreateMutex retornará ERROR_ALREADY_EXISTS, ou seja, alguém já está com a posse e não o liberou ainda.

Note que exsite um try finally no código e daí você pode pensar: Em todas as tentativas de chamada do programa, elas sempre irão executar ReleaseMutex, mas ReleaseMutex só liberará o objeto p/ aquele que estiver com a posse.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...