🧠 Explicação
O comando EXEC CICS DELAY
suspende o processamento da tarefa corrente por um intervalo de tempo especificado (FOR) ou até uma hora do dia (UNTIL). É utilizado para pausar a execução de uma transação sem finalizar a tarefa.
A pausa pode ser definida em horas, minutos, segundos ou milissegundos. A execução é retomada automaticamente após a expiração do tempo. É possível atribuir um identificador (REQID
) à solicitação para que ela possa ser cancelada por outra transação usando o comando EXEC CICS CANCEL
.
Este comando é thread-safe apenas quando o intervalo for zero.
🛠️ Usos mais comuns
-
Aguardar um tempo fixo antes de continuar o processamento.
-
Realizar retentativas após falhas temporárias (ex: aguardar liberação de recurso).
-
Sincronizar etapas em processamento batch ou online.
-
Criar tarefas temporizadas combinando com
REQID
eCANCEL
.
🧾 Sintaxe
EXEC CICS DELAY
[FOR [HOURS(n)] [MINUTES(n)] [SECONDS(n)] [MILLISECS(n)]]
[UNTIL [HOURS(n)] [MINUTES(n)] [SECONDS(n)]]
[INTERVAL(hhmmss)]
[TIME(hhmmss)]
[REQID(nome-identificador)]
END-EXEC.
💻 Exemplos práticos em COBOL
▶️ Exemplo 1: Aguardar 5 minutos
EXEC CICS DELAY
FOR MINUTES(5)
END-EXEC.
▶️ Exemplo 2: Aguardar até 12h45
EXEC CICS DELAY
TIME(124500)
REQID('WAIT001')
END-EXEC.
▶️ Exemplo 3: Pausa de 15 segundos
EXEC CICS DELAY
FOR SECONDS(15)
END-EXEC.
▶️ Exemplo 4: Aguardar 15.000 milissegundos com identificador
EXEC CICS DELAY
FOR MILLISECS(15000)
REQID('DELAYX15')
END-EXEC.
📋 Parâmetros principais
Parâmetro | Tipo | Descrição |
---|---|---|
FOR | Composto | Define duração da pausa. Pode usar HOURS, MINUTES, SECONDS e MILLISECS. |
UNTIL | Composto | Define hora exata para retomar a tarefa. |
INTERVAL | Decimal compactado | Pausa relativa no formato HHMMSS. |
TIME | Decimal compactado | Hora absoluta no formato HHMMSS. |
REQID | X(8) | Identificador da solicitação, usado em conjunto com CANCEL. |
⚠️ Regras
-
O tempo de pausa mínimo reconhecido é 50 ms — abaixo disso, a tarefa é liberada imediatamente.
-
O intervalo é verificado a cada 250 ms, podendo haver leve variação na precisão.
-
Ao usar
REQID
, certifique-se de armazená-lo em lugar acessível, como fila TS, se desejar cancelamento por outra tarefa. -
Um
DELAY
substitui qualquerPOST
anterior da mesma tarefa.
💡 Dicas
-
Combine
DELAY + REQID + CANCEL
para controle refinado entre transações. -
Use
MILLISECS
para pausas curtas com precisão maior. -
Prefira
FOR
comHOURS
,MINUTES
,SECONDS
em vez deINTERVAL
para maior clareza e compatibilidade com C. -
Em C, evite
INTERVAL
eTIME
se não tiver valores constantes — C não lida bem com decimal compactado.
✅ Conclusão
O comando EXEC CICS DELAY
é útil para controlar pausas temporais dentro do fluxo de execução de uma transação. Ele permite aguardar um tempo definido com precisão e pode ser interrompido por outra tarefa, se configurado corretamente com REQID
. Simples, mas poderoso, é ideal para sincronizações, controle de tempo e retentativas automatizadas.