diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/ThreadedLoader.cpp | 12 | ||||
-rw-r--r-- | src/gui/ThreadedLoader.hpp | 9 |
2 files changed, 12 insertions, 9 deletions
diff --git a/src/gui/ThreadedLoader.cpp b/src/gui/ThreadedLoader.cpp index 597a728d..5c33c1de 100644 --- a/src/gui/ThreadedLoader.cpp +++ b/src/gui/ThreadedLoader.cpp @@ -31,14 +31,13 @@ namespace Ingen { namespace GUI { ThreadedLoader::ThreadedLoader(App& app, SPtr<Interface> engine) - : Raul::Thread() - , _app(app) + : _app(app) , _sem(0) , _engine(engine) + , _exit_flag(false) + , _thread(&ThreadedLoader::run, this) { - if (parser()) { - start(); - } else { + if (!parser()) { app.log().warn("Parser unavailable, graph loading disabled\n"); } } @@ -47,6 +46,7 @@ ThreadedLoader::~ThreadedLoader() { _exit_flag = true; _sem.post(); + _thread.join(); } SPtr<Serialisation::Parser> @@ -61,7 +61,7 @@ ThreadedLoader::parser() } void -ThreadedLoader::_run() +ThreadedLoader::run() { while (_sem.wait() && !_exit_flag) { _mutex.lock(); diff --git a/src/gui/ThreadedLoader.hpp b/src/gui/ThreadedLoader.hpp index 815cfeec..7f4de063 100644 --- a/src/gui/ThreadedLoader.hpp +++ b/src/gui/ThreadedLoader.hpp @@ -17,6 +17,8 @@ #ifndef INGEN_GUI_THREADEDLOADER_HPP #define INGEN_GUI_THREADEDLOADER_HPP +#include <thread> + #include <cassert> #include <list> #include <string> @@ -28,7 +30,6 @@ #include "ingen/serialisation/Parser.hpp" #include "ingen/serialisation/Serialiser.hpp" #include "raul/Semaphore.hpp" -#include "raul/Thread.hpp" namespace Ingen { namespace GUI { @@ -44,7 +45,7 @@ namespace GUI { * * \ingroup GUI */ -class ThreadedLoader : public Raul::Thread +class ThreadedLoader { public: ThreadedLoader(App& app, @@ -70,13 +71,15 @@ private: /** Returns nothing and takes no parameters (because they have all been bound) */ typedef sigc::slot<void> Closure; - void _run(); + void run(); App& _app; Raul::Semaphore _sem; SPtr<Interface> _engine; Glib::Mutex _mutex; std::list<Closure> _events; + bool _exit_flag; + std::thread _thread; }; } // namespace GUI |