Histórico da Página
...
Executa funções 4GL a partir de uma nova THREAD de forma assíncrona.
Hierarquia
...
- LCOMPONENT
- LTHREAD
Métodos GET
...
Inclusão de trecho | ||||||
---|---|---|---|---|---|---|
|
Métodos SET
...
Inclusão de trecho | ||||||
---|---|---|---|---|---|---|
|
Sintaxe
...
Bloco de código |
---|
LET m_thread_reference = _ADVPL_create_component(NULL,"LTHREAD") |
Exemplo
...
Bloco de código | ||
---|---|---|
| ||
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).
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas