MainframeSupports
tip uge 45/2015:

Helt tilbage i 2006 uge 38 skrev jeg et tip om at vente i REXX og COBOL, som ikke har en sådan funktion indbygget. Jeg har nu på egen krop erfaret, at metoden ikke længere virker, i hvert fald ikke i REXX. Det tvang mig til at finde en anden måde at gøre det på.

Der findes et Language Environment modul kaldet CEEDLYM, der kan kaldes fra COBOL, men det virker kun med statisk link, og derfor kan det ikke bruges fra REXX. Til gengæld kræver CEEDLYM ikke, at man kører i 24 bits adresse mode, og så skal man angive ventetiden i millisekunder, hvilket er noget mere granuleret end sekunder, som ILBOWAT0 tilbød. Et eksempel:

01  MISC.
  03  DELAY-TIME PIC S9(9) BINARY.
  03  CEE-RC PIC X(12).
...
MOVE 5000 TO DELAY-TIME
CALL 'CEEDLYM' USING DELAY-TIME CEE-RC
IF CEE-RC = LOW-VALUES
  DISPLAY 'WAIT OK'
ELSE
  DISPLAY 'WAIT FAILED WITH ' CEE-RC
END-IF

Jeg håber, at jeg kan tilgives de manglende indrykninger og andre manglende statements. Ovenstående erklæringer og kode vil få dit COBOL program til at holde en pause på 5 sekunder. Lad være med at køre ovenstående i CICS. Enten fejler det gudsjammerligt, eller endnu værre, så holder hele CICS regionen en pause på 5 sekunder.

Men hvad så med REXX, som jo udløste min udfordring? Her fandt jeg ud af, at der findes en helt anden metode:

SLEEPTIME = 5
CALL SYSCALLS 'ON'
ADDRESS SYSCALL "SLEEP" SLEEPTIME
CALL SYSCALLS 'OFF'

ADDRESS SYSCALL giver dig adgang til at eksekvere diverse z/OS UNIX kommandoer, og en af dem er SLEEP, som forstår et antal sekunder assignet til en REXX variabel. Så er der ikke andet tilbage end at prøve at vente.

Forrige danske tip        Last tip in english        Tip oversigten