1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

NEW SHARED e NEW GLOBAL SHARED

Discussão em 'Progress 4GL' iniciado por af.dums, Maio 22, 2009.

  1. af.dums

    af.dums Membro Ativo

    Alguém pode me dizer a diferença entre uma variável definida com new shared e outra definida como newm global shared. Ambas não mantêm o valor em menória?

    Obrigado
  2. Matheus

    Matheus Sem Pontuação

    Variáveis definidas com new shared são visíveis para as procedures chamadas direta ou indiretamente pelo programa onde foi definida.
    Já a opção new global shared faz com que a variável seja visível para toda a sessão progress do usuário
  3. Raviel

    Raviel Sem Pontuação

    Ola, vou explicar do jeito que eu entendo. Corrijam-me se estiver errado.

    Você pode definir uma NEW SHARED VARIABLE, mas ela só fica em memória durante a execução dessa sessão depois ela é apagada, e para usar essa VARIABLE deve ser definida com DEFINE SHARED VARIABLE (sem o new). No caso da NEW GLOBAL SHARED VARIABLE ela fica salva em memória mesmo depois de terminado a sessão ficando visível pelas demais e eu posso usar ela definindo tanto com DEFINE SHARED VARIABLE como com o NEW GLOBAL SHARED VARIABLE.
    Ex:
    Vejam que ao executar main1 e depois mess1 “teste” fica na memória.

    Código:
    /* 
    programa:    main1.p 
    programador: MarcosP 
    */
    
    DEF NEW GLOBAL SHARED VAR c-global
        AS CHARACTER
        FORMAT "x(3)":U
        NO-UNDO.
    
    ASSIGN c-global = "Teste".
    Código:
    /* 
    programa:    mess1.p 
    programador: MarcosP 
    */
    
    DEF NEW GLOBAL SHARED VAR c-global /* or DEF SHARED VAR c-global */
        AS CHARACTER
        FORMAT "x(3)":U
        NO-UNDO.
    
    MESSAGE c-global
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    Mas para usar NEW SHARED VARIABLE deve estar tudo na mesma sessão. Se eu não desse um run e simplesmente executa-se a mess2, como no caso anterior(mess1), ela daria um erro que c-shared não foi criada.

    Código:
    /* 
    programa:    main2.p 
    programador: MarcosP 
    */
    
    DEF NEW SHARED VAR c-shared
        AS CHARACTER
        FORMAT "x(3)":U
        NO-UNDO.
    
    ASSIGN c-shared = "Teste".
    
    RUN c:\mess2.p.
    Código:
    /* 
    programa:    mess2.p 
    programador: MarcosP 
    */
    
    DEF SHARED VAR c-shared
        AS CHARACTER
        FORMAT "x(3)":U
        NO-UNDO.
    
    MESSAGE c-shared
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
  4. Matheus

    Matheus Sem Pontuação

    Raviel, é mais ou menos isso.

    A new shared será compartilhada dentro da mesma sessão Progress, porém somente em programas que compartilham chamadas, exatamente no caso do teu exemplo, onde o programa c:\mess2.p utiliza o valor da variável definida no programa c:\mess1.p que a chamou. Se houver um programa c:\mess3.p que não for chamado pelo programa c:\mess1.p ele não conseguirá utilizar a variável new shared.

    Já as new global shared são compartilhadas dentro da mesma sessão, porém independente do programa ter sido chamado pelo programa que criou ou não. Por exemplo, se você criar uma variável new shared no programa c:\mess1.p e o programa c:\mess2.p é chamado pelo c:\mess1.p você consegue visualizar seu valor; mais longe ainda, se houver um programa c:\mess3.p ele também terá o valor da variável definida no c:\mess1.p, mesmo que o c:\mess3.p não tenha sido chamado pelo c:\mess1.p ou ainda que o programa c:\mess1.p já tenha sido encerrado.
  5. af.dums

    af.dums Membro Ativo

    Hum, entendi...

    SHARED, eu tenho um programa pai.p onde eu defino a new shared, e nos filhos.p que chamo de dentro deste programa se declarar a variável como shared posso acessar seu conteúdo.

    GLOBAL SHARED, consigo acessar de qualquer programa na sessão progress... nao apenas obedecendo a estrutura pai->filho.

    Obrigado a todos...

    Aquele abraço...

Compartilhe esta Página