Cxxx::StartThread() { m_fStopThread=FALSE; unsigned int dwThreadId = 0; m_hThread = reinterpret_cast( _beginthreadex( NULL, 0, tmpThread, this, 0, &dwThreadId ) ); if(INVALID_HANDLE_VALUE==m_hThread) { return ...; } return ...; } Cxxx::StopThread() { m_fStopThread=TRUE; if(INVALID_HANDLE_VALUE!=m_hThread) { DWORD ret=WaitForSingleObject(m_hThread, 3000); if(WAIT_TIMEOUT==ret) { return ...; } } return ...; } unsigned int Cxxx::tmpThread(void* pParam) { Cxxx* pThis=reinterpret_cast(pParam); pThis->Thread(); CloseHandle(pThis->m_hThread); pThis->m_h=INVALID_HANDLE_VALUE; return 0; } void Cxxx::Thread() { while(!m_fStopThread) { rödelrödel...; } } //-------------------header Cxxx { HANDLE m_hThread; BOOL m_fStopThread; static unsigned int __stdcall tmpThread(void* pParam); void Thread(void); }