Synchronization Using an Event Semaphore (Part 2)

case WMP_THREAD:
     usReturn = DosCreateThread(ThreadID,      /* Create thread          */
                                Thread,        /* Entry point for thread */
                                NULL,          /* No initialization data */
                                0L,            /* Start immediately      */
                                4096);         /* Stack size for thread  */
     WinStartTimer(hAB,                        /* Start timer            */
                   hwnd,                       /* Window to get WM_TIMER */
                   TID_THREAD,                 /* ID of timer            */
                   500);                       /* Period in milliseconds */
     break;
        :
case WM_TIMER:
     ulResult=DosOpenEventSem("\SEM32\THREAD", /* Get semaphore handle   */
                              hSem);           /* Semaphore handle       */

     ulResult=DosWaitEventSem(hSem,            /* Check semaphore state  */
                              0);              /* Immediate timeout      */

     if (ulResult!=ERROR_TIMEOUT)              /* Semaphore not set      */
        {
        <perform end-of-thread processing>     /* Thread has completed   */
        }

     ulResult=DosCloseEventSem(hSem);          /* Close semaphore        */
     break;

This example shows the window procedure in the primary thread, periodically testing to determine whether the event semaphore has been released.


[Back: Synchronization Using an Event Semaphore (Part 1)]
[Next: Synchronization Using the DosWaitThread() Function (Part 1)]