X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fplatform%2Fthreads%2Fthreads.h;h=0cc07eee883f6646e98bd65b6cfb601f5d8c1c96;hb=ce37a9b17b1eee6488f6d3cdba534d5da71c3ea4;hp=0efebdc2c0b47e14df475846e4f65ff92aa15dd1;hpb=8f6e48cd4aaefa12c0a5cbd6cc17f8649396bdf6;p=deb_libcec.git diff --git a/src/lib/platform/threads/threads.h b/src/lib/platform/threads/threads.h index 0efebdc..0cc07ee 100644 --- a/src/lib/platform/threads/threads.h +++ b/src/lib/platform/threads/threads.h @@ -45,7 +45,10 @@ namespace PLATFORM virtual ~CThread(void) { - StopThread(); + StopThread(0); + void *retVal; + ThreadsWait(m_thread, &retVal); + (void *)retVal; //"unreferenced local variable" warning } static void *ThreadHandler(CThread *thread) @@ -88,22 +91,26 @@ namespace PLATFORM virtual bool CreateThread(bool bWait = true) { - bool bReturn(false); - CLockObject lock(m_threadMutex); - if (!IsRunning()) + bool bReturn(false); + CLockObject lock(m_threadMutex); + if (!IsRunning()) + { + m_bStop = false; + if (ThreadsCreate(m_thread, CThread::ThreadHandler, ((void*)static_cast(this)))) { - m_bStop = false; - if (ThreadsCreate(m_thread, CThread::ThreadHandler, ((void*)static_cast(this)))) - { - if (bWait) - m_threadCondition.Wait(m_threadMutex, m_bRunning); - bReturn = true; - } + if (bWait) + m_threadCondition.Wait(m_threadMutex, m_bRunning); + bReturn = true; } + } return bReturn; } - virtual bool StopThread(bool bWaitForExit = true) + /*! + * @brief Stop the thread + * @param iWaitMs negative = don't wait, 0 = infinite, or the amount of ms to wait + */ + virtual bool StopThread(int iWaitMs = 5000) { bool bReturn(true); bool bRunning(false); @@ -113,12 +120,17 @@ namespace PLATFORM m_bStop = true; } - if (bRunning && bWaitForExit) + if (bRunning && iWaitMs >= 0) { - void *retVal = NULL; - bReturn = ThreadsWait(m_thread, &retVal); + CLockObject lock(m_threadMutex); + bReturn = m_threadCondition.Wait(m_threadMutex, m_bStopped, iWaitMs); } - return true; + else + { + bReturn = true; + } + + return bReturn; } virtual bool Sleep(uint32_t iTimeout)