some tips, uh? the method, WaitforSingleObject(threadhandle, waittime) will return a value equal to WAIT_TIMEOUT if the thread is still alive (not in signalled state). instead of if(m_hThreadF1 != 0) try using this method with waittime as zero, as below: if(WaitForSingleObject(m_hThread, 0)==WAIT_TIMEOUT) // The thread s alive else // The thread s signalled, spawn new make sure that the pThread's m_autodelete s set to false. u mentioned, the thread s supposed to be alive till da end. in this case, it seems, ur thread func has to make a slight modification. ResumeThread(handle), will resume a thread from the point it has been suspended, so, in ur case, when the ThreadFuncF1 resumes, it jst exits!!! ThreadFuncF1() { do{ // do the intended processing // Finished Processing, Notify parent SuspendThread(m_hThreadF1) }while(TRUE); // do processing again } hope thes'll help. :sigh: thanks, -- 'whiz'