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 */ <Store ThreadID in instance data block> WinStartTimer(hAB, /* Start timer */ hwnd, /* Window to get WM_TIMER */ TID_THREAD, /* ID of timer */ 50); /* Period in milliseconds */ break; : case WM_TIMER: <Get ThreadID from instance data block> ulReturn=DosWaitThread(ThreadID, /* Check thread status */ DCWW_NOWAIT); /* Immediate timeout */ if (ulReturn==ERROR_THREAD_NOT_TERMINATED) /* Thread still running */ break; /* Continue waiting */ else /* else */ <perform end-of-thread processing> /* Thread has completed */ break;
This example shows the window procedure in the primary thread, periodically testing to determine whether the secondary thread has terminated.