Jump to content

DosEnterMustComplete: Difference between revisions

From EDM2
Ak120 (talk | contribs)
mNo edit summary
Ak120 (talk | contribs)
Line 6: Line 6:
#include <os2.h>
#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. */
PULONG pulNesting; /* A pointer to a value that is equal to the number of DosEnterMustComplete
APIRET   ulrc;       /* Return Code. */
                      requests minus the number of DosExitMustComplete requests for the
                      current thread. */
APIRET ulrc;       /* Return Code. */


ulrc = DosEnterMustComplete(pulNesting);
ulrc = DosEnterMustComplete(pulNesting);

Revision as of 04:39, 6 January 2017

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

Syntax

#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);

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