an_cp Postado Fevereiro 22, 2005 Denunciar Share Postado Fevereiro 22, 2005 Preciso de um ajuda em relação a Executar o programa + de uma vez na mesma máquina. Peguei exemplos na internet, mas não funcionaram . Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 22, 2005 Denunciar Share Postado Fevereiro 22, 2005 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 an_cp Postado Fevereiro 25, 2005 Autor Denunciar Share Postado Fevereiro 25, 2005 S3c Valeu ... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Fevereiro 26, 2005 Denunciar Share Postado Fevereiro 26, 2005 Olá, s3cEntendi o código, mas o que é na realidade um MUTEX? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 26, 2005 Denunciar Share Postado Fevereiro 26, 2005 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Fevereiro 26, 2005 Denunciar Share Postado Fevereiro 26, 2005 Muito obrigado pela explicação, s3c.Ficou claro! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
an_cp
Preciso de um ajuda em relação a Executar o programa + de uma vez na mesma máquina. Peguei exemplos na internet, mas não funcionaram .
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
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.