Jump to content

DosEnterMustComplete: Difference between revisions

From EDM2
Ak120 (talk | contribs)
Ak120 (talk | contribs)
mNo edit summary
Line 2: Line 2:


==Syntax==
==Syntax==
<PRE>
  DosEnterMustComplete(pulNesting)
#define INCL_DOSEXCEPTIONS
#include <os2.h>
 
PULONG pulNesting; /* A pointer to a value that is equal to the number of DosEnterMustComplete
                      requests minus the number of DosExitMustComplete requests for the
                      current thread. */
APIRET  ulrc;      /* Return Code. */
 
ulrc = DosEnterMustComplete(pulNesting);
</PRE>


==Parameters==
==Parameters==
Line 21: Line 11:
DosEnterMustComplete returns one of the following values:
DosEnterMustComplete returns one of the following values:
* 0 NO_ERROR
* 0 NO_ERROR
* 650 ERROR_NESTING_TOO_DEEP  
* 650 ERROR_NESTING_TOO_DEEP


==Remarks==
==Remarks==

Revision as of 20:41, 7 November 2017

Provides entry into a section of code in which asynchronous exceptions are held.

Syntax

DosEnterMustComplete(pulNesting)

Parameters

pulNesting (PULONG) - output
A pointer to a value that is equal to the number of DosEnterMustComplete requests minus the number of DosExitMustComplete requests for the current thread.

Return Code

ulrc (APIRET) - returns

DosEnterMustComplete returns one of the following values:

  • 0 NO_ERROR
  • 650 ERROR_NESTING_TOO_DEEP

Remarks

Note: Do not make Presentation Manager calls from exception handlers.

DosEnterMustComplete notifies the system that the thread is entering a section of code in which asynchronous exceptions (signals and asynchronous process terminations) are to be held, rather than being immediately delivered to the thread.

Example Code

This example shows how a thread can notify the system to hold asynchronous exceptions during a section of code.

 #define INCL_DOSEXCEPTIONS   /* Exception values */
 #define INCL_DOSERRORS       /* Error values */
 #include <os2.h>
 #include <stdio.h>

 int main(VOID)
   {
   ULONG   ulNestLevel = 0;  /* Global variable tracking nesting
                                of DosEnterMustComplete calls     */
   APIRET  rc = NO_ERROR;    /* Return code                       */

    rc = DosEnterMustComplete(&ulNestLevel);

    if (rc != NO_ERROR) {
        printf("DosEnterMustComplete error: return code = %u\n",rc);
        return 1;
    } else {
        printf("ulNestLevel = %u\n",ulNestLevel);
    }

        /* ADD BLOCK OF CODE THAT MUST COMPLETE HERE... */

    rc = DosExitMustComplete(&ulNestLevel);

    if (rc != NO_ERROR) {
        printf("DosExitMustComplete error: return code = %u\n",rc);
        return 1;
    } else {
        printf("ulNestLevel = %u\n",ulNestLevel);
    }

    return NO_ERROR;
    }

Related Functions