CEE3DLY—Suspend processing of the active enclave in seconds

CEE3DLY provides a service for Language Environment-conforming applications that suspends the processing of the active enclave for a specified number of seconds. The maximum is 1 hour.

Read syntax diagramSkip visual syntax diagram
Syntax

>>-CEE3DLY--(--input_seconds--,--fc--)-------------------------><

input_seconds
A fullword binary value in the range of 0 to 3600 that specifies the total number of seconds during which the enclave should be suspended.
fc (output)
A 12-byte feedback code, optional in some languages, that indicates the result of this service. If you choose to omit this parameter, refer to Invoking callable services for the appropriate syntax to indicate that the feedback code was omitted.

The following symbolic conditions can result from this service:

Code Severity Message number Message text
CEE3QQ 1 CEE3930W The input value input_value in a call to the callable service callable_service_name was not within the valid range.
CEE3QS 1 CEE3932W The system service system_service failed with return code return_code and reason code reason_code.

Usage notes

  • CICS® consideration—CEE3DLY is available under CICS.
  • z/OS UNIX consideration—CEE3DLY is handled by the z/OS UNIX System Services when POSIX is set to ON.
  • This service is not intended for timing requests. Delays up to the nearest second might occur in some circumstances.
  • In a multi-threaded application, only the calling thread is suspended.

Examples

  1. An example of CEE3DLY called by C/C++:
    /*Module/File Name: EDC3DLY   */
    /*********************************************************************/
    /*                                                                   */
    /* THIS EXAMPLE CALLS CEE3DLY TO SUSPEND PROCESSING OF THE ACTIVE    */
    /* ENCLAVE FOR SPECIFIED NUMBER OF SECONDS.                          */
    /*                                                                   */
    /*********************************************************************/
    #include <time.h>
    #include <stdio.h>
    #include <leawi.h>
    #include <ceeedcct.h>
    
    int main(void)
    {
      _INT4 seconds;
      _FEEDBACK fc;
      time_t ltime;
    
      /* Get the time in seconds */
      time(&ltime);
      printf("CEE3DLY Start  time : %s", ctime(&ltime));
    
      seconds = 10;
      CEE3DLY(&seconds,&fc);
    
      if ( _FBCHECK ( fc , CEE000 ) != 0 ) {
        printf("CEE3DLY failed with message number %d\n",fc.tok_msgno);
        exit(999);
      }
    
      time(&ltime);
      printf("CEE3DLY Finish time : %s", ctime(&ltime));
    }
  2. A example of CEE3DLY called by COBOL:
    CBL LIB,QUOTE
          *****************************************************************
          *MODULE/FILE NAME: IGZT3DLY
          *****************************************************************
          **                                                             **
          ** FUNCTION: CEE3DLY - SUSPEND ENCLAVE EXECUTION IN SECONDS    **
          **                                                             **
          ** THIS EXAMPLE CALLS CEE3DLY TO SUSPEND PROCESSING OF THE     **
          ** ACTIVE ENCLAVE FOR SPECIFIED NUMBER OF SECONDS.             **
          **                                                             **
          *****************************************************************
           IDENTIFICATION DIVISION.
           PROGRAM-ID. CBL3DLY.
           DATA DIVISION.  WORKING-STORAGE SECTION.
           01  DATE-TIME                   PIC X(21).
           01  CUR-DATE-FIELDS.
               03  CURRENT-DATE            PIC X(8).
               03  FILLER REDEFINES CURRENT-DATE.
                   05  CUR-MM              PIC XX.
                   05                      PIC X.
                   05  CUR-DD              PIC XX.
                   05                      PIC X.
                   05  CUR-YY              PIC XX.
               03  TIME-OF-DAY             PIC X(8).
           01  SECONDS   PIC S9(9) BINARY.
           01  FC.
               02  CONDITION-TOKEN-VALUE.
               COPY  CEEIGZCT.
                   03  CASE-1-CONDITION-ID.
                      04  SEVERITY     PIC S9(4) BINARY.
                      04  MSG-NO       PIC S9(4) BINARY.
                   03  CASE-2-CONDITION-ID
                            REDEFINES CASE-1-CONDITION-ID.
                      04  CLASS-CODE   PIC S9(4) BINARY.
                      04  CAUSE-CODE   PIC S9(4) BINARY.
                   03  CASE-SEV-CTL    PIC X.
                   03  FACILITY-ID     PIC XXX.
               02  I-S-INFO            PIC S9(9) BINARY.
           PROCEDURE DIVISION.
           PARA-CBL3DLY.
               MOVE FUNCTION CURRENT-DATE TO DATE-TIME.
               STRING DATE-TIME (5:2) "/"
                      DATE-TIME (7:2) "/"
                      DATE-TIME (3:2)
                          DELIMITED BY SIZE
                          INTO CURRENT-DATE.
               STRING DATE-TIME (9:2)  ":"
                      DATE-TIME (11:2) ":"
                      DATE-TIME (13:2)
                          DELIMITED BY SIZE
                          INTO TIME-OF-DAY.
               DISPLAY "CEE3DLY - BEGINS"
               DISPLAY "DATE    : " CURRENT-DATE
               DISPLAY "TIME    : " TIME-OF-DAY
               MOVE 10 TO SECONDS.
               CALL "CEE3DLY" USING SECONDS, FC.
               IF NOT CEE000 OF FC THEN
                  DISPLAY "CEE3DLY FAILED WITH MSG "
                           MSG-NO OF FC
                  STOP RUN
               END-IF.
               MOVE FUNCTION CURRENT-DATE TO DATE-TIME.
               STRING DATE-TIME (5:2) "/"
                      DATE-TIME (7:2) "/"
                      DATE-TIME (3:2)
                          DELIMITED BY SIZE
                          INTO CURRENT-DATE.
               STRING DATE-TIME (9:2)  ":"
                      DATE-TIME (11:2) ":"
                      DATE-TIME (13:2)
                          DELIMITED BY SIZE
                          INTO TIME-OF-DAY.
               DISPLAY "CEE3DLY - COMPLETED"
               DISPLAY "DATE    : " CURRENT-DATE
               DISPLAY "TIME    : " TIME-OF-DAY
               GOBACK.
  3. An example of CEE3DLY called by PL/I:
    *PROCESS MACRO;                                                         00001000
        /***************************************************/               00013000
      /*MODULE/FILE NAME: IBM3DLY                                        */ 00014000
      /*******************************************************************/ 00015000
      /**                                                               **/ 00016000
      /** FUNCTION: CEE3DLY - SUSPENDS ENCLAVE EXECUTION IN SECONDS     **/ 00017000
      /**                                                               **/ 00018000
      /** THIS EXAMPLE CALLS CEE3DLY TO SUSPEND PROCESSING OF THE       **/ 00019000
      /** ACTIVE ENCLAVE FOR SPECIFIED NUMBER OF SECONDS.               **/ 00020000
      /**                                                               **/ 00021000
      /*******************************************************************/ 00022000
      PLI3DLY: PROCEDURE OPTIONS (MAIN) REORDER;                            00023000
                                                                            00024000
        %INCLUDE  CEEIBMAW;                                                 00025000
        %INCLUDE  CEEIBMCT;                                                 00026000
                                                                            00027000
        DECLARE DLYSECS  REAL FIXED BINARY(31,0);                           00028000
        DECLARE LILIAN   REAL FIXED BINARY(31,0);                           00029000
        DECLARE SECONDS  REAL FLOAT DECIMAL(16);                            00030000
        DECLARE GREGORN  CHARACTER (17);                                    00031000
                                                                            00032000
        DECLARE 01 FC1,             /* FEEDBACK TOKEN FOR CEELOCT */        00033000
                   03 MSGSEV       REAL FIXED BINARY(15,0),                 00034000
                   03 MSGNO        REAL FIXED BINARY(15,0),                 00035000
                   03 FLAGS,                                                00036000
                      05 CASE      BIT(2),                                  00037000
                      05 SEVERITY  BIT(3),                                  00038000
                      05 CONTROL   BIT(3),                                  00039000
                   03 FACID        CHAR(3),                                 00040000
                   03 ISI          REAL FIXED BINARY(31,0);                 00041000
                                                                            00042000
        DECLARE 01 FC2,             /* FEEDBACK TOKEN FOR CEE3DLY */        00043000
                   03 MSGSEV       REAL FIXED BINARY(15,0),                 00044000
                   03 MSGNO        REAL FIXED BINARY(15,0),                 00045000
                   03 FLAGS,                                                00046000
                      05 CASE      BIT(2),                                  00047000
                      05 SEVERITY  BIT(3),                                  00048000
                      05 CONTROL   BIT(3),                                  00049000
                   03 FACID        CHAR(3),                                 00050000
                   03 ISI          REAL FIXED BINARY(31,0);                 00051000
                                                                            00052000
        CALL CEELOCT ( LILIAN, SECONDS, GREGORN, FC1 );                     00053000
        IF FBCHECK(FC1, CEE000)  THEN  DO;                                  00054000
          PUT SKIP LIST ( 'CEE3DLY START  DATE AND TIME: ' || GREGORN );    00055000
        END;                                                                00056000
        ELSE DO;                                                            00057000
          PUT ( 'CEELOCT FAILED WITH MSG ' || FC1.MSGNO );                  00058000
          STOP;                                                             00059000
        END;                                                                00060000
       DLYSECS = 30;                                                        00062000
        CALL CEE3DLY(DLYSECS, FC2);                                         00063000
        IF FBCHECK(FC2, CEE000) THEN DO;                                    00064000
          CALL CEELOCT ( LILIAN, SECONDS, GREGORN, FC1 );                   00065000
          IF  FBCHECK(FC1, CEE000)  THEN  DO;                               00066000
            PUT SKIP LIST ( 'CEE3DLY FINISH DATE AND TIME: ' || GREGORN );  00067000
          END;                                                              00068000
          ELSE DO;                                                          00069000
            PUT ('CEELOCT FAILED WITH MSG ' || FC1.MSGNO );                 00070000
            STOP;                                                           00071000
          END;                                                              00072000
          PUT SKIP LIST ( 'CEE3DLY IS SUCCESSFUL!' );                       00073000
        END;                                                                00074000
        ELSE DO;                                                            00075000
          PUT SKIP LIST ( 'CEE3DLY FAILED WITH MSG ' || FC2.MSGNO );        00076000
          STOP;                                                             00077000
        END;                                                                00078000
                                                                            00079000
      END PLI3DLY;                                                          00061000