Duvida Pegar o PID do Progress para abrir apenas uma vez

Discussão em 'Progress 4GL' iniciado por ueluis, Junho 11, 2015.

  1. ueluis

    ueluis Membro Participativo

    galera muito obrigado mesmo pela ajuda,

    @rafael.andrade ,

    desenvolvi um sistema para leitura da produção de itens com código de barras.
    No modulo de produção acontecem rejeições de alguns itens que são repostos em outro processo.
    A numeração deste item não pode ser duplicada, e quando alguém em qualquer computador vier a acessar o módulo de reposição em um determinado pedido.
    o sistema não deixa outro usuario acessar o mesmo.
    Em relação ao PID, como o sistema roda em terminais, não posso deixar o controlador abrir dois programas em um mesmo terminal.
    portanto graças a vocês implementarei esta verificação.

    abç
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Maravilha, grandes contribuições, não sabia do parâmetro -wss
  3. Eilleen

    Eilleen Membro Ativo

    uia!
    Eu ia ter que pesquisar sobre isso por esses dias... preciso especificar uma integração que não pode ter 2 processos simultâneos executando... Já me poupou um bom tempo!
    Obrigada a todos pelas contribuições!
  4. ueluis

    ueluis Membro Participativo

    galera segue o resultado da contribuição de todos,
    implementei uma include (em anexo no post) e coloquei em DEFINITIONS da smart principal, utilizei uma variavel onde armazeno o caminho para criar um "INI", junto com um stream de saida.
    segue abaixo o esquema:

    Código:
    DEFINE VARIABLE vini AS CHAR INIT "C:\TEMP\sis.ini".
    
    DEFINE STREAM sai_txt_ini.
    {include/i_processos.i}
    criei uma procedure para verificar a aplicação:
    Código:
    /*
               |============================================================|
              |=     PROCEDURE VEIRIFICAR_APLICACAO                                                          =|
             |=     VEFICICA SE JÁ EXISTE UMA SMART EM EXECUÇÃO                               =|
            |=     ELABORADO POR: Ueliton Luis                                                                       =|
           |=     DATA DE CRIAÇÃO: 11/Jul/2015                                                                     =|
          |=     DATA DE MODIFICAÇÃO:                                                                              =|
         |===========================================================|
    */
    PROCEDURE p_verificar_aplicacao:
    DEFINE VARIABLE intProcessHandle AS INTEGER NO-UNDO.
    DEFINE VARIABLE texto AS INT.
    
    RUN GetCurrentProcessId (OUTPUT intProcessHandle).
    FILE-INFO:FILE-NAME = vini.
        IF  FILE-INFO:FULL-PATHNAME  = ? THEN DO:
                OUTPUT STREAM sai_txt_ini TO VALUE (vini).
               EXPORT STREAM sai_txt_ini intprocesshandle SKIP.
                OUTPUT STREAM sai_txt_ini CLOSE.
        END.
        ELSE DO:
            INPUT FROM VALUE(vini).
            repeat while true:
                IMPORT texto.
            END.
           
            IF GetProcessName(texto) = "[UNKNOWN]" THEN DO:
                OUTPUT STREAM sai_txt_ini TO VALUE (vini).
               EXPORT STREAM sai_txt_ini intprocesshandle SKIP.
                OUTPUT STREAM sai_txt_ini CLOSE.
            END.
            ELSE
                IF texto <> intProcessHandle THEN DO:
                    MESSAGE "JÁ EXISTE OUTRA APLICAÇÃO EM EXECUÇÃO COM PID:" string(TEXTO) SKIP
                        "É NECESSÁRIO ENCERRAR A APLICAÇÃO ANTERIOR" VIEW-AS ALERT-BOX ERROR TITLE "A P L I C A Ç Ã O   E M   E X E C U Ç Ã O   " .
                     QUIT.
                END.
    
        END.
    END PROCEDURE.
    
    
    em DEFINITIONS chamo a procedure antes de exibir a tela do sistema:
    Código:
    RUN p_verificar_aplicacao.
    
    
    a lógica é :
    quando abrir uma smart:
    > pego o pid dela.
    > verifico se existe um arquivo INI.
    > caso não existir crio e armazeno o pid da smart.
    > quando o usuario abrir uma nova smart verifica se o pid do INI foi encontrado.
    > caso encontrar mensagem para usuario
    > caso contrario substitui o PID do INI pelo PID da Smar atual.

    fiquem a vontade para melhorar a lógica e postar os resultados!!
    abç a todos!

    Arquivos Anexados:

  5. jaisonantoniazzi

    jaisonantoniazzi Membro Ativo

    Bom dia galera,
    o -wss é muito útil mas ele impede sessões com o uso do parâmetro...
    Uma boa sugestão seria usar o MUTEX https://msdn.microsoft.com/en-us/library/windows/desktop/ms686927(v=vs.85).aspx

    Já o usei e recomendo.

    rafael.andrade curtiu isso.

Compartilhe esta Página