summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/ThreadedLoader.cpp12
-rw-r--r--src/gui/ThreadedLoader.hpp9
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