diff options
author | James Rowe <jroweboy@gmail.com> | 2015-05-16 19:56:00 +0200 |
---|---|---|
committer | James Rowe <jroweboy@gmail.com> | 2015-05-18 16:15:57 +0200 |
commit | a406207cd81c9fc3218f29394e11e7711817c458 (patch) | |
tree | 87bf96769c74b48468144e9ab238688ee9370434 | |
parent | Merge pull request #781 from archshift/delete (diff) | |
download | yuzu-a406207cd81c9fc3218f29394e11e7711817c458.tar yuzu-a406207cd81c9fc3218f29394e11e7711817c458.tar.gz yuzu-a406207cd81c9fc3218f29394e11e7711817c458.tar.bz2 yuzu-a406207cd81c9fc3218f29394e11e7711817c458.tar.lz yuzu-a406207cd81c9fc3218f29394e11e7711817c458.tar.xz yuzu-a406207cd81c9fc3218f29394e11e7711817c458.tar.zst yuzu-a406207cd81c9fc3218f29394e11e7711817c458.zip |
-rw-r--r-- | src/citra_qt/bootmanager.cpp | 3 | ||||
-rw-r--r-- | src/citra_qt/bootmanager.h | 13 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp index d3df289f8..ab9403007 100644 --- a/src/citra_qt/bootmanager.cpp +++ b/src/citra_qt/bootmanager.cpp @@ -59,6 +59,9 @@ void EmuThread::run() { yieldCurrentThread(); was_active = false; + } else { + std::unique_lock<std::mutex> lock(running_mutex); + running_cv.wait(lock, [this]{ return IsRunning() || stop_run; }); } } diff --git a/src/citra_qt/bootmanager.h b/src/citra_qt/bootmanager.h index d5d74c949..16809eaae 100644 --- a/src/citra_qt/bootmanager.h +++ b/src/citra_qt/bootmanager.h @@ -3,6 +3,8 @@ // Refer to the license.txt file included. #include <atomic> +#include <condition_variable> +#include <mutex> #include <QThread> #include <QGLWidget> @@ -40,7 +42,12 @@ public: * @param running Boolean value, set the emulation thread to running if true * @note This function is thread-safe */ - void SetRunning(bool running) { this->running = running; } + void SetRunning(bool running) { + std::unique_lock<std::mutex> lock(running_mutex); + this->running = running; + lock.unlock(); + running_cv.notify_all(); + } /** * Check if the emulation thread is running or not @@ -54,13 +61,15 @@ public: */ void RequestStop() { stop_run = true; - running = false; + SetRunning(false); }; private: bool exec_step; bool running; std::atomic<bool> stop_run; + std::mutex running_mutex; + std::condition_variable running_cv; GRenderWindow* render_window; |