Histórico da Página
Pagetitle | ||||
---|---|---|---|---|
|
Sintaxe
Bloco de código |
---|
LET m_thread_reference = _ADVPL_create_component(NULL,"LTHREAD") |
Métodos GET
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 |