Páginas filhas
  • LGX - LTHREAD

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
titleExemplo LTHREAD
linenumberstrue
DATABASE logix

GLOBALS
    DEFINE p_user LIKE usuarios.cod_usuario
    DEFINE p_cod_empresa LIKE empresa.cod_empresa
END GLOBALS

#------------------------------------------------------------------------------#
FUNCTION LTHREAD_test()
#------------------------------------------------------------------------------#
    DEFINE l_thread_reference VARCHAR(10)
 
    DEFINE l_status   SMALLINT
    DEFINE l_is_alive SMALLINT
    DEFINE l_message  CHAR(200)

    IF  LOG_initApp("PADRAO") <> 0 THEN
        RETURN
    END IF

    # Cria o componente para requisições REST.
    LET l_thread_reference = _ADVPL_create_component(NULL,"LTHREAD")

    # Define a função que será executada numa nova THREAD.
    CALL _ADVPL_set_property(l_thread_reference,"FUNCTION","LTHREAD_testFunction")

    # Adiciona os parâmetros que serão enviados para a função.
    CALL _ADVPL_set_property(l_thread_reference,"CLEAR_PARAMETERS")
    CALL _ADVPL_set_property(l_thread_reference,"ADD_PARAMETER",p_user CLIPPED)
    CALL _ADVPL_set_property(l_thread_reference,"ADD_PARAMETER",p_cod_empresa CLIPPED)

    # Inicia a execução da função em uma nova THREAD.
    LET l_status = _ADVPL_get_property(l_thread_reference,"START")

    IF  l_status THEN
        # Verifica se a THREAD está em execução.
        LET l_is_alive = _ADVPL_get_property(l_thread_reference,"IS_ALIVE")

        IF  l_is_alive THEN
            CALL log0030_mensagem("Is Alive? Sim!","info")
        ELSE
            CALL log0030_mensagem("Is Alive? Não!","excl")
        END IF

        # Aguarda até o término da THREAD.
        CALL _ADVPL_get_property(l_thread_reference,"JOIN")
        CALL log0030_mensagem("THREAD finalizada","info")
    ELSE
        # Recupera a mensagem de erro.
        LET l_message = _ADVPL_get_property(l_thread_reference,"ERROR_MESSAGE")
        CALL log0030_mensagem(l_message,"stop")
    END IF

    # Ao finalizar o uso, libera o componente da memória.
    CALL _ADVPL_destroy_component(l_thread_reference)
END FUNCTION

#------------------------------------------------------------------------------#
FUNCTION LTHREAD_testFunction(l_cod_usuario,l_cod_empresa)
#------------------------------------------------------------------------------#
    DEFINE l_val_env     CHAR(50)
    DEFINE l_cod_usuario CHAR(08)
    DEFINE l_cod_empresa CHAR(02)

    IF  LOG_initApp("PADRAO") = 0 THEN
        LET l_val_env = LOG_getEnv("IPLOCAL_LGX")
        CALL CONOUT("IPLOCAL_LGX: "||l_val_env CLIPPED)

        LET l_val_env = LOG_getEnv("LTHREAD_CMP")
        CALL CONOUT("LTHREAD_CMP: "||l_val_env CLIPPED)

        CALL CONOUT("USUARIO....: "||l_cod_usuario CLIPPED)
        CALL CONOUT("EMPRESA....: "||l_cod_empresa CLIPPED)

        # Aguarda 5 segundos para que o teste do IS_ALIVE funcione.
        SLEEP 5
    END IF
END FUNCTION

Observações

  • É possível determinar a quantidade máxima de THREADs que serão executadas a partir de uma THREAD pai, para não sobrecarregar o servidor de aplicação, através da chave de PROFILE logix.threads.max.
  • É possível emitir mensagens de LOG específicas deste componente, auxiliando em testes ou em resoluções de problemas, para isso a chave de PROFILE logix.threads.debug precisa estar definida com o valor 1 (ligado).