DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 94f2f5087a16928bbf3f347603d051f37b898d98
parent 663f30a047541aee6d719aae5715a1ea25cde1d1
Author: falkTX <falktx@gmail.com>
Date:   Tue, 29 Mar 2016 11:46:54 +0200

Use a signal to wait for thread start

Diffstat:
Mdistrho/extra/Thread.hpp | 16+++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/distrho/extra/Thread.hpp b/distrho/extra/Thread.hpp @@ -37,7 +37,8 @@ protected: * Constructor. */ Thread(const char* const threadName = nullptr) noexcept - : fLock(false), + : fLock(), + fSignal(fLock), fName(threadName), #ifdef PTW32_DLLPORT fHandle({nullptr, 0}), @@ -92,7 +93,7 @@ public: // check if already running DISTRHO_SAFE_ASSERT_RETURN(! isThreadRunning(), true); - const MutexLocker cml(fLock); + fLock.lock(); fShouldExit = false; @@ -109,11 +110,11 @@ public: _copyFrom(handle); // wait for thread to start - fLock.lock(); - + fSignal.wait(); return true; } + fLock.unlock(); return false; } @@ -210,6 +211,7 @@ public: private: Mutex fLock; // Thread lock + Signal fSignal; // Thread start wait signal const String fName; // Thread name volatile pthread_t fHandle; // Handle for this thread volatile bool fShouldExit; // true if thread should exit @@ -258,11 +260,11 @@ private: */ void _runEntryPoint() noexcept { - // report ready - fLock.unlock(); - setCurrentThreadName(fName); + // report ready + fSignal.broadcast(); + try { run(); } catch(...) {}