Jump to content

DosEnterMustComplete: Difference between revisions

From EDM2
Ak120 (talk | contribs)
Ak120 (talk | contribs)
 
(2 intermediate revisions by the same user not shown)
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 18: Line 8:


==Return Code==
==Return Code==
ulrc (APIRET) - returns
;ulrc (APIRET) - returns: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==
Line 29: Line 18:


==Example Code==
==Example Code==
This example shows how a thread can notify the system to hold asynchronous exceptions during a section of code.
{{OS2API Example MustComplete}}
<PRE>
#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;
    }
</PRE>


==Related Functions==
==Related Functions==

Latest revision as of 18:01, 15 January 2019

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