SmartJob [AS]
Autor: Eurai Criado: 30/03/2025 Atualizado: 30/03/2025Descrição
Executa uma rotina em uma nova thread sem interface. Consiste em inserir o Job em uma fila e somente libera a execução caso existam recursos de CPU e memória confortáveis para executar essa nova thread, diferentemente do StartJob. . |
Sintaxe
SmartJob( <cFuncao>, <cEnv>, <lWait>, <xParans> ) |
INI
[SMARTJOB]
memload=75
minjobs=2
maxjobs=10
Quando não configurados, os valores default são, respectivamente, 60, 2 e 16.
Parâmetros
Par | Nome | Tipo | Descrição | Default | Obg | Ref |
01 |
cFuncao | Caracter | Indica o nome do Job que será executado | X | ||
02 | cEnv | Caracter | Indica o nome do ambiente em que o Job será executado | X | ||
03 | lWait | Boolean | Indica se, verdadeiro (.T.), o processo será finalizado; caso contrário, falso (.F.). | X | ||
04 | xParans | Indefinido | Os parâmetros (máximo 25 parâmetros) informados a partir deste ponto serão repassados para a função especificada no parâmetro cName. Caso informados parâmetros do tipo B (Code-Block) ou O (Object), no processo de destino receberá NIL |
Retorno
Retorno | Tipo | Descrição |
lRet | Boolean |
Se lWait for verdadeiro (.T.) o retorno do StartJob será o retorno da função a ser executada como um JOB (cName), caso lWait seja falso (.F.) o retorno é nulo (NIL). |
Exemplo
#INCLUDE "TOTVS.CH" User Function StartJ() SmartJob("U_JOB", GetEnvServer(), .F., 'UniversoADVPL', 'ADVPL' ) Return( Nil ) User Function JOB( cMen1, cMen2 ) Conout( cMen1 + ' - ' + cMen2, 'UniversoADVPL' ) Return( Nil )
Resultado
Informações adicionais
A fila de SmartJobs não emprega prioridades, ou seja, é um autêntico FIFO (Firt in - First Out); Quando inserido na fila, um SmartJob permanece nela até ganhar a oportunidade de ser executado; Internamente, quando a fila cresce muito ou está com baixa vazão, o motor de execução pode criar algumas threads a mais do que a configuração máxima, a fim de suprir a demanda; No momento em que a execução de SmartJobs retorna à condições propícias e tendo o motor criado threads extras, ele mesmo se encarrega de voltar aos valores originais de configuração; Estando a fila de jobs vazia, para economizar recursos, o motor de execução pode ficar sem threads ativas (stand by), só as reativando se houver demanda. |
Gostou? Compartilhe com seus amigos e deixe um comentário! 😎