X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Fthreads%2Fthreads.h;h=b5ccf3850815845b1d37e458ab163fcd78e62f93;hb=3a99ce7f6d43f2bb1b35d7365d1ca476cd967626;hp=f2de310a23749f7960ef3882008c61e317c5eeb9;hpb=960f33c651b2dd1e6331dafe5b21705c11cee1a2;p=deb_libcec.git diff --git a/src/lib/platform/threads/threads.h b/src/lib/platform/threads/threads.h index f2de310..b5ccf38 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) @@ -103,7 +106,11 @@ namespace PLATFORM 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); + } + else + { + bReturn = true; } - return true; + + return bReturn; } virtual bool Sleep(uint32_t iTimeout) @@ -133,11 +145,11 @@ namespace PLATFORM void SetRunning(bool bSetTo); private: - bool m_bStop; - bool m_bRunning; - bool m_bStopped; - CCondition m_threadCondition; - CMutex m_threadMutex; - thread_t m_thread; + bool m_bStop; + bool m_bRunning; + bool m_bStopped; + CCondition m_threadCondition; + CMutex m_threadMutex; + thread_t m_thread; }; };