Histórico da Página
Pagetitle | ||||
---|---|---|---|---|
|
Métodos GET
...
Sintaxe
Bloco de código |
---|
LET m_thread_reference = _ADVPL_create_component(NULL,"LTHREAD") |
...
Sintaxe
Bloco de código |
---|
LET m_thread_reference = _ADVPL_create_component(NULL,"LTHREAD") |
Exemplo
...
title | Exemplo LTHREAD |
---|---|
linenumbers | true |
Métodos GET
...
Métodos SET
...
Métodos acessíveis através da função _ADVPL_get_property
que permite recuperar e manipular os valores do componente:
Expandir | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Método GET: JOINAguarda a finalização da THREAD. Sintaxe
Retorno
Exemplo
|
Expandir | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Método GET: IS_ALIVEVerifica se a THREAD atual está "viva", ou seja, em execução. Sintaxe
Retorno
Exemplo
|
Expandir | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Método GET: STARTCria e inicia a execução de uma nova THREAD. Sintaxe
Retorno
Exemplo
Observação
|
Expandir | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Método GET: ERROR_MESSAGERetorna a mensagem de erro ocorrida durante a criação ou execução da THREAD. Sintaxe
Retorno
Exemplo
|
Expandir | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Método GET: DEBUG_MODERetorna o modo de DEBUG atual em uso pela THREAD a ser executada. Sintaxe
Retorno
Exemplo
|
Expandir | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Método GET: DEBUG_PATHRetorna a pasta de destino, no disco do servidor onde o AppServer está em execução, para geração do arquivo de LOG com mensagens de DEBUG durante a execução da função na nova THREAD. Sintaxe
Retorno
Exemplo
|
Expandir | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Método GET: RETURN_VALUERecupera o retorno da função executada pela nova Thread quando a propriedade WAIT_RUN estiver com valor TRUE, indicando que deverá aguardar o término da execução da função da Thread. Sintaxe
Retorno
Exemplo
|
Métodos SET
Métodos acessíveis através da função _ADVPL_set_property
que permite alterar e manipular os valores do componente:
Expandir | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||
Método SET: FUNCTIONDefine a função que será executada em uma nova THREAD. Sintaxe
Parâmetros
Exemplo
|
Expandir | |||||||
---|---|---|---|---|---|---|---|
| |||||||
Método SET: CLEAR_ENVIRONMENTSLimpa as variáveis de ambiente definidas anteriormente. Sintaxe
Exemplo
|
Expandir | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||
Método SET: ADD_ENVIRONMENTDefine uma nova variável de ambiente que será considerada na execução da nova THREAD. Sintaxe
Parâmetros
Exemplo
|
Expandir | |||||||
---|---|---|---|---|---|---|---|
| |||||||
Método SET: CLEAR_PARAMETERSLimpa os parâmetros definidos anteriormente. Sintaxe
Exemplo
|
Expandir | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||
Método SET: ADD_PARAMETERAdiciona um novo parâmetros que será enviado para a função definida para execução em uma nova THREAD. Sintaxe
Parâmetros
Exemplo
|
Expandir | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||
Método SET: PROCESS_TYPEDefine o tipo da função que será executada em uma nova THREAD. Sintaxe
Parâmetros
Exemplo
|
Expandir | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||
Método SET: DEBUG_MODEDefine o modo de DEBUG assumido durante a execução da função na nova THREAD. Sintaxe
Parâmetros
Exemplo
|
Expandir | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||
Método SET: DEBUG_PATHDefine a pasta de destino, no disco do servidor onde o AppServer está em execução, para geração do arquivo de LOG com mensagens de DEBUG durante a execução da função na nova THREAD. Sintaxe
Parâmetros
Exemplo
|
Expandir | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||
Método SET: ENVIRONMENTDefine o ambiente em que a nova THREAD deverá ser executada no AppServer, caso exista necessidade de indicar um ambiente diferente do ambiente atual em que o processo está em execução. Sintaxe
Parâmetros
Exemplo
|
Expandir | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||
Método SET: WAIT_RUNDefine se deve aguardar ou não o término da execução da função indicada na Thread antes de continuar a executar as próximas instruções. Sintaxe
Parâmetros
Exemplo
|
Expandir | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||
Método SET: ADD_FINISH_EVENTAdiciona uma função 4GL a ser executa após o término da execução da função indicada para a nova THREAD,ou seja, antes de finalizar a nova Thread todas funções adicionadas através desta propriedade serão executadas. Sintaxe
Parâmetros
Exemplo
|
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).
Exemplo
Clique no link na lateral direita para expandir o código de 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 |