Duvida Programa "não respondendo"

Discussão em 'Progress 4GL' iniciado por jc01, Março 19, 2015.

  1. jc01

    jc01 Membro Participativo

    Seguinte, tenho uma tela que chama um programa que gera um relatório. Esse programa que gera um relatório faz um processamento bastante intenso, ou seja, demora pra concluir. A tela que chama esse programa de relatório acaba ficando travada, como se estivesse em loop infinito.

    No programa de relatório tentei usar o PROCESS EVENTS nos FOR EACH mas não resolveu.

    Alguém tem alguma ideia?
  2. Eilleen

    Eilleen Membro Ativo

    Boa tarde!
    Já tentou verificar em qual busca está demorando mais e se tem como melhorar a performance? Talvez precise modificar o índice ou então a forma de fazer a busca...
  3. jc01

    jc01 Membro Participativo

    Boa tarde. O problema é que meu programa não faz uma simples busca. Já criei índice onde deveria ser criado. Ele realmente é demorado "por natureza".
    Eu preciso achar uma forma de "destravar" a tela que chama o relatório pro usuário não ter a impressão que de que está em loop infinito.
  4. Eilleen

    Eilleen Membro Ativo

    Normalmente eu uso o PROCESS EVENTS e já resolve...
    Vc pode mudar o wait-state da sessão, para que o cursor fique no modelo "processando":

    Código:
    SESSION:SET-WAIT-STATE("GENERAL").  // cursor "processando"
    
    SESSION:SET-WAIT-STATE("").  // cursor "normal"
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Quando se fala em relatórios e processamentos é recomendável sempre exibir para o usuário o que está acontecendo ao invés de liberar o programa pois senão ele pode fazer mais operações ainda e gerar muito mais IO de disco.

    Recomendo o uso do acompanhamento do Progress, Exemplo:
    Código:
    DEF VAR xi AS INTEGER.
    DEF var h-acomp    AS HANDLE.
    
    RUN utp/ut-acomp.p PERSISTENT SET h-acomp.
    RUN pi-inicializar IN h-acomp ("Processando"). /* Exibição Inicial */
    
    PAUSE 3 NO-MESSAGE. /* Pausa dramática de demonstração */
    
    DO xi = 1 TO 20000.
       RUN pi-acompanhar IN h-acomp(TRIM(STRING(xi,">>>,>>>,>>>,>>9"))). /* Exibe o valor no campo da tela de acompanhamento*/
    END.
    
    RUN pi-finalizar IN h-acomp. /* finaliza o acompanhamento */
    
    Obs.: O campo de acompanhamento tem formato x(45), ou seja, máximo de 45 caracteres podem ser exibidos.

    Abraço

    Rafael
  6. jc01

    jc01 Membro Participativo

    Rafael, agradeço a resposta. Na verdade eu estava utilizando o "pi-acompanhar", só que eu tirei porque o processamento ficava muito mais lento. Por exemplo, se o processamento do relatório com o "pi-acompanhar" demorava 160 segundos, tirando ele passou a processar em 80 segundos, praticamente metade do tempo. Por isso estou procurando outra alterativa que não afete o desempenho do meu programa.

Compartilhe esta Página