Jump to content

DosExitMustComplete: Difference between revisions

From EDM2
Ak120 (talk | contribs)
mNo edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Description==
Provides exit from a section of code in which asynchronous exceptions are held.
Provides exit from a section of code in which asynchronous exceptions are held.


==Syntax==
==Syntax==
<PRE>
DosExitMustComplete(pulNesting)
#define INCL_DOSEXCEPTIONS
#include <os2.h>


PULONG    pulNesting;  /*  Pointer to the nesting level. */
APIRET    ulrc;        /*  Return Code. */
ulrc = DosExitMustComplete(pulNesting);
</PRE>
==Parameters==
==Parameters==
; pulNesting (PULONG) - output : Pointer to the nesting level.
;pulNesting (PULONG) - output : Pointer to the nesting level.
:The nesting level is equal to the number of DosEnterMustComplete requests minus the number of DosExitMustComplete requests for the current thread.


The nesting level is equal to the number of DosEnterMustComplete requests minus the number of DosExitMustComplete requests for the current thread.
==Return Code==
==Return Code==
ulrc (APIRET) - returns
;ulrc (APIRET) - returns:DosExitMustComplete returns one of the following values:
 
* 0  NO_ERROR
DosExitMustComplete returns one of the following values:
*300 ERROR_ALREADY_RESET


* 0    NO_ERROR
* 300        ERROR_ALREADY_RESET
==Remarks==
==Remarks==
Note: Do not make Presentation Manager calls from exception handlers.
Note: Do not make Presentation Manager calls from exception handlers.
Line 30: Line 19:


==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==
* [[OS2 API:CPI:DosAcknowledgeSignalException|DosAcknowledgeSignalException]]
*[[DosAcknowledgeSignalException]]
* [[OS2 API:CPI:DosEnterMustComplete|DosEnterMustComplete]]
*[[DosEnterMustComplete]]
* [[OS2 API:CPI:DosRaiseException|DosRaiseException]]
*[[DosRaiseException]]
* [[OS2 API:CPI:DosSendSignalException|DosSendSignalException]]
*[[DosSendSignalException]]
* [[OS2 API:CPI:DosSetExceptionHandler|DosSetExceptionHandler]]
*[[DosSetExceptionHandler]]
* [[OS2 API:CPI:DosSetSignalExceptionFocus|DosSetSignalExceptionFocus]]
*[[DosSetSignalExceptionFocus]]
* [[OS2 API:CPI:DosUnsetExceptionHandler|DosUnsetExceptionHandler]]
*[[DosUnsetExceptionHandler]]
* [[OS2 API:CPI:DosUnwindException|DosUnwindException]]
*[[DosUnwindException]]


[[Category:The OS/2 API Project]]
[[Category:Dos]]

Latest revision as of 18:03, 15 January 2019

Provides exit from a section of code in which asynchronous exceptions are held.

Syntax

DosExitMustComplete(pulNesting)

Parameters

pulNesting (PULONG) - output
Pointer to the nesting level.
The nesting level is equal to the number of DosEnterMustComplete requests minus the number of DosExitMustComplete requests for the current thread.

Return Code

ulrc (APIRET) - returns
DosExitMustComplete returns one of the following values:
  • 0 NO_ERROR
  • 300 ERROR_ALREADY_RESET

Remarks

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

DosExitMustComplete notifies the system that the calling thread is leaving a section of code in which any asynchronous exceptions (signals and asynchronous process terminations) that may have occurred were 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