DosEnterMustComplete: Difference between revisions
Appearance
mNo edit summary |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
==Syntax== | ==Syntax== | ||
DosEnterMustComplete(pulNesting) | |||
==Parameters== | ==Parameters== | ||
Line 16: | Line 8: | ||
==Return Code== | ==Return Code== | ||
;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 27: | Line 18: | ||
==Example Code== | ==Example Code== | ||
{{OS2API Example MustComplete}} | |||
==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;
}