This sample sets the current thread priority to Time Critical level 15. It then uses DosGetInfoBlocks to retrieve the priority.
#define INCL_DOSPROCESS #define INCL_DOSERRORS #include <os2.h> #include <stdio.h> int main(VOID) { PTIB ptib = NULL; /* Thread information block structure */ PPIB ppib = NULL; /* Process information block structure */ APIRET rc = NO_ERROR; /* Return code */ rc = DosSetPriority (PRTYS_THREAD, /* Change a single thread */ PRTYC_TIMECRITICAL, /* Time critical class */ 15L, /* Increase by 15 */ 0L); /* Assume current thread */ if (rc != NO_ERROR) { printf ("DosSetPriority error : rc = %u\n", rc); return 1; } else { rc = DosGetInfoBlocks(&ptib, &ppib); if (rc != NO_ERROR) { printf ("DosGetInfoBlocks error : rc = %u\n", rc); return 1; } else { printf("Priority Class = %d\n", ((ptib->tib_ptib2->tib2_ulpri) >> 8) & 0x00FF); printf("Priority Level = %d\n", ((ptib->tib_ptib2->tib2_ulpri) & 0x001F) ); } /* endif */ } return NO_ERROR; }
If you only want the address of the TIB returned, code the DosGetInfoBlocks call as follows:
rc = DosGetInfoBlocks(&ptib, NULL);
If you only want the address of the PIB returned, code the DosGetInfoBlocks call as follows:
rc = DosGetInfoBlocks(NULL, &ppib.);