CEEDLYM—Suspend processing of the active enclave in milliseconds

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

Read syntax diagramSkip visual syntax diagram
Syntax

>>-CEEDLYM--(--input_milliseconds--,--fc--)--------------------><

input_milliseconds
A full-word binary value in the range of 0 to 3,600,000 that specifies the total number of milliseconds 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.
CEE3QR 1 CEE3931W CEEDLYM was invoked in a CICS® environment.
CEE3QS 1 CEE3932W The system service system_service failed with return code return_code and reason code reason_code.

Usage notes

  • CICS consideration—CEEDLYM is not available under CICS.
  • z/OS UNIX consideration—CEEDLYM 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 millisecond might occur in some circumstances.
  • In a multi-threaded application, only the calling thread is suspended.

Examples

  1. Following is an example of CEEDLYM called by C/C++.
    /*Module/File Name: EDCDLYM  */
    /*********************************************************************/
    /*                                                                   */
    /* THIS EXAMPLE CALLS CEEDLYM TO SUSPEND PROCESSING OF THE ACTIVE    */
    /* ENCLAVE FOR SPECIFIED NUMBER OF MILLISECONDS.                     */
    /*                                                                   */
    /*********************************************************************/
    #include <string.h>
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <leawi.h>
    #include <ceeedcct.h>
    
    int main(void)
    {
      _INT4 millisecs, lil_date;
      _FLOAT8   local_date;
      _CHAR17   gregorian_date;
      _FEEDBACK fc1, fc2;
    
      /* Get current date and time */
      CEELOCT(&lil_date,&local_date,gregorian_date,&fc1);
      if ( _FBCHECK ( fc1 , CEE000 ) != 0 ) {
        printf("CEELOCT failed with message number %d\n",
               fc1.tok_msgno);
        exit(2999);
      }
      printf("CEEDLYM Start  time :  %.17s\n", gregorian_date);
    
      millisecs = 5000;
      CEEDLYM(&millisecs,&fc2);
    
      if ( _FBCHECK ( fc2 , CEE000 ) != 0 ) {
        printf("CEEDLYM failed with message number %d\n",fc2.tok_msgno);
        exit(999);
      }
    
      CEELOCT(&lil_date,&local_date,gregorian_date,&fc1);
      if ( _FBCHECK ( fc1 , CEE000 ) != 0 ) {
        printf("CEELOCT failed with message number %d\n",
               fc1.tok_msgno);
        exit(2999);
      }
      printf("CEEDLYM Finish time :  %.17s\n",gregorian_date);
    }
  2. Following is an example of CEEDLYM called by COBOL.
    CBL LIB,QUOTE
          *************************************************
          *MODULE/FILE NAME: IGZTDLYM
          *****************************************************************
          **                                                             **
          ** FUNCTION: CEEDLYM - SUSPEND ENCLAVE EXECUTION IN MILLISECS  **
          **                                                             **
          ** THIS EXAMPLE CALLS CEEDLYM TO SUSPEND PROCESSING OF THE     **
          ** ACTIVE ENCLAVE FOR SPECIFIED NUMBER OF MILLISECONDS.        **
          **                                                             **
          *****************************************************************
           IDENTIFICATION DIVISION.
           PROGRAM-ID. CBLDLYM.
           DATA DIVISION.
           WORKING-STORAGE SECTION.
           01  LILIAN                  PIC S9(9) BINARY.
           01  SECONDS                 COMP-2.
           01  GREGORN                 PIC X(17).
           01  MILLISECS               PIC S9(9) BINARY.
           01  FC1.
               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.
           01  FC2.
               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-CBLDLYM.
               DISPLAY "CEEDLYM - BEGINS"
               CALL "CEELOCT" USING LILIAN, SECONDS, GREGORN, FC1.
               IF CEE000 OF FC1 THEN
                 DISPLAY "START  DATE & TIME: " GREGORN
               ELSE
                 DISPLAY "CEELOCT FAILED WITH MSG "
                          MSG-NO OF FC1
                 STOP RUN
               END-IF.
               MOVE 5000 TO MILLISECS.
               CALL "CEEDLYM" USING MILLISECS, FC2.
               IF NOT CEE000 OF FC2 THEN
                  DISPLAY "CEEDLYM FAILED WITH MSG "
                           MSG-NO OF FC2
                  STOP RUN
               END-IF.
               DISPLAY "CEEDLYM - COMPLETED"
               CALL "CEELOCT" USING LILIAN, SECONDS,
                              GREGORN, FC1.
               IF CEE000 OF FC1 THEN
                 DISPLAY "FINISH DATE & TIME: " GREGORN
               ELSE
                 DISPLAY "CEELOCT FAILED WITH MSG "
                          MSG-NO OF FC1
                 STOP RUN
               END-IF.
               GOBACK.
  3. Following is an example of CEEDLYM called by PL/I.
    *PROCESS MACRO;                                                         00001000
      /*MODULE/FILE NAME: IBMDLYM                                        */ 00014000
      /*******************************************************************/ 00015000
      /**                                                               **/ 00016000
      /** FUNCTION: CEEDLYM - SUSPENDS ENCLAVE EXECUTION IN MILLISECS   **/ 00017000
      /**                                                               **/ 00018000
      /** THIS EXAMPLE CALLS CEEDLYM TO SUSPEND PROCESSING OF THE       **/ 00019000
      /** ACTIVE ENCLAVE FOR SPECIFIED NUMBER OF MILLISECS.             **/ 00020000
      /**                                                               **/ 00021000
      /*******************************************************************/ 00022000
      PLIDLYM: PROCEDURE OPTIONS (MAIN) REORDER;                            00023000
                                                                            00024000
        %INCLUDE  CEEIBMAW;                                                 00025000
        %INCLUDE  CEEIBMCT;                                                 00026000
                                                                            00027000
        DECLARE MILLISECS 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 CEEDLYM */        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 ( 'CEEDLYM START  DATE AND TIME: ' || GREGORN );    00055000
        END;                                                                00056000
        ELSE DO;                                                            00057000
          PUT ( 'CEELOCT FAILED WITH MSG ' || FC1.MSGNO );                  00058000
          STOP;                                                             00059000
        END;                                                                00060000
                                                                            00061000
        MILLISECS = 6000;                                                   00062000
        CALL CEEDLYM(MILLISECS, 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 ( 'CEEDLYM 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 ( 'CEEDLYM IS SUCCESSFUL!' );                       00073000
        END;                                                                00074000
        ELSE DO;                                                            00075000
          PUT SKIP LIST ( 'CEEDLYM FAILED WITH MSG ' || FC2.MSGNO );        00076000
          STOP;                                                             00077000
        END;                                                                00078000
                                                                            00079000
      END PLIDLYM;                                                          00080000