This example creates an event semaphore and the asyncronous timer uses it to post when its time expires. Finally, it closes the event semaphore.

 #define INCL_DOSSEMAPHORES   /* Semaphore values */
 #define INCL_DOSDATETIME     /* Timer support    */
 #define INCL_DOSERRORS       /* DOS error values */
 #include <os2.h>
 #include <stdio.h>

 int main(VOID) {

 PSZ     szSemName  = "\\SEM32\\TIMER\\THREAD1\\EVENT1"; /* Semaphore name */
 HEV     hevEvent1     = 0;                   /* Event semaphore handle    */
 HTIMER  htimerEvent1  = 0;                   /* Timer handle              */
 APIRET  rc            = NO_ERROR;            /* Return code               */

    rc = DosCreateEventSem(szSemName,      /* Name of semaphore to create  */
                           &hevEvent1,     /* Handle of semaphore returned */
                           DC_SEM_SHARED,  /* Shared semaphore             */
                           FALSE);         /* Semaphore is in RESET state  */
    if (rc != NO_ERROR) {
        printf("DosCreateEventSem error: return code = %u\n", rc);
        return 1;       }

    rc = DosAsyncTimer(7000L,              /* 7 second interval            */
                       (HSEM) hevEvent1,   /* Semaphore to post            */
                       &htimerEvent1);     /* Timer handler (returned)     */
    if (rc != NO_ERROR) {
        printf("DosAsyncTimer error: return code = %u\n", rc);
        return 1;
    } else {
        printf("Timer will expire in about 7 seconds...\n");
    }

           /* ... add your other processing here... */

    rc = DosWaitEventSem(hevEvent1,            /* Wait for AsyncTimer event */
                 (ULONG) SEM_INDEFINITE_WAIT); /* As long as it takes       */
    if (rc != NO_ERROR) {
        printf("DosWaitEventSem error: return code = %u\n", rc);
        return 1;
    }

    rc = DosCloseEventSem(hevEvent1);      /* Get rid of semaphore       */
    if (rc != NO_ERROR) {
        printf("DosCloseEventSem error: return code = %u", rc);
        return 1;
    }

return NO_ERROR;
}


[Back] [Next]