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.
- 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
- 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); }
- 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.
- 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