StartJob

Executa a chamada de um processo

Exemplo da Rotina:

StartJob(cFuncao, cAmbiente, lIraAguardar)

Exemplo 1- Exemplificação de chamada de jobs com threads simultâneas:

#Include 'Protheus.ch'
 
/*/{Protheus.doc} zCCHStart
Executa JOBs simultâneos no mesmo processo
@author Caio César Henrique
@since 03/12/2019
@version 1.0
@type function
@example U_zCCHStart()
/*/
 
User Function zCCHStart()
 
    /* Declaração de Variáveis */
    Local nThreads := 5
    Local nCount   := 0
 
    /* Abro minha empresa TESTE */
    RpcSetEnv("99","01")
 
    /* Looping de acordo com a quantidade de Threads desejadas */
    For nCount := 1 To nThreads
 
        /* Chama a função zCCHTXT cinco vezes no Looping, passando como parâmetro
           o número da Thread */
        StartJob("U_zTXT",GetEnvServer(),.F.,cValToChar(nCount))
       
    Next
 
    /* Encerro minha empresa TESTE */
    RpcClearEnv()
 
Return ( Nil )
 
/*/{Protheus.doc} zCCHStart
Executa JOBs simultâneos no mesmo processo
@author Caio César Henrique
@since 03/12/2019
@version 1.0
@type function
@example U_zCCHStart()
/*/
 
User Function zTXT(nThread)
 
    /* Declaração de Variáveis */
    Local nCurrent := Val(nThread)
    Local nHandle  := 0
 
    ConOut("Processo Iniciado - Thread: "+AllTrim(cValToChar(nCurrent)))
 
    /* Defino cada processo para cada thread */
    Do Case
        Case nCurrent = 1
           
            /* Cria arquivo teste */
            nHandle := FCreate("\Thread_"+cValToChar(nCurrent)+".txt")
            If nHandle = -1
                ConOut("Erro ao criar arquivo - FError " + Str(FError()))
            Else
                /* Alimento arquivo com 100 linhas básicas */
                For nCount := 1 To 100
                    FWrite(nHandle, "Registro: "+AllTrim(cValToChar(nCount)) + CRLF)
                Next
 
                /* Fecho arquivo */
                FClose(nHandle)
            EndIf
   
        Case nCurrent = 2
 
            /* Cria arquivo teste */
            nHandle := FCreate("\Thread_"+cValToChar(nCurrent)+".txt")
            If nHandle = -1
                ConOut("Erro ao criar arquivo - FError " + Str(FError()))
            Else
                /* Alimento arquivo com 100 linhas básicas */
                For nCount := 1 To 100
                    FWrite(nHandle, "Registro: "+AllTrim(cValToChar(nCount)) + CRLF)
                Next
 
                /* Fecho arquivo */
                FClose(nHandle)
            EndIf
 
        Case nCurrent = 3
 
            /* Cria arquivo teste */
            nHandle := FCreate("\Thread_"+cValToChar(nCurrent)+".txt")
            If nHandle = -1
                ConOut("Erro ao criar arquivo - FError " + Str(FError()))
            Else
                /* Alimento arquivo com 100 linhas básicas */
                For nCount := 1 To 100
                    FWrite(nHandle, "Registro: "+AllTrim(cValToChar(nCount)) + CRLF)
                Next
 
                /* Fecho arquivo */
                FClose(nHandle)
            EndIf
 
        Case nCurrent = 4
 
            /* Cria arquivo teste */
            nHandle := FCreate("\Thread_"+cValToChar(nCurrent)+".txt")
            If nHandle = -1
                ConOut("Erro ao criar arquivo - FError " + Str(FError()))
            Else
                /* Alimento arquivo com 100 linhas básicas */
                For nCount := 1 To 100
                    FWrite(nHandle, "Registro: "+AllTrim(cValToChar(nCount)) + CRLF)
                Next
 
                /* Fecho arquivo */
                FClose(nHandle)
            EndIf
 
        Case nCurrent = 5  
           
            /* Cria arquivo teste */
            nHandle := FCreate("\Thread_"+cValToChar(nCurrent)+".txt")
            If nHandle = -1
                ConOut("Erro ao criar arquivo - FError " + Str(FError()))
            Else
                /* Alimento arquivo com 100 linhas básicas */
                For nCount := 1 To 100
                    FWrite(nHandle, "Registro: "+AllTrim(cValToChar(nCount)) + CRLF)
                Next
 
                /* Fecho arquivo */
                FClose(nHandle)
            EndIf
    EndCase
 
/* Encerro o processo */
ConOut("Processo Encerrado - Thread: "+AllTrim(cValToChar(nCurrent)))
 
Return ( Nil )

Observações:

  • Caso tenha dúvidas ou problemas com os exemplos, entre em contato;
  • Se tiver sugestões de rotinas, pode entrar em contato;
  • Função e documentação enviada por Caio Henrique;

Referências: