diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-10-25 02:03:13 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-10-25 02:03:13 +0100 |
| commit | 7d344b1ecad24ee573c9da06d454e696a8149e5a (patch) | |
| tree | 4062b81fd2043f5cd5d4828edddeacd82a1ea411 /src/lib | |
| parent | 8c3eac75cc3717371dce1132bf10093f5ec3a26f (diff) | |
Try to directly call UI callbacks if we're already in the UI thread; call wake_ui() where required.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/ui_signaller.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/lib/ui_signaller.h b/src/lib/ui_signaller.h index 0797d911e..9de1b736d 100644 --- a/src/lib/ui_signaller.h +++ b/src/lib/ui_signaller.h @@ -22,17 +22,26 @@ #include <boost/bind.hpp> #include <boost/asio.hpp> +#include <boost/thread.hpp> class UISignaller { public: + /** Create a UISignaller. Must be called from the UI thread */ UISignaller () : _work (_service) - {} + { + _ui_thread = boost::this_thread::get_id (); + } template <typename T> void emit (T f) { - _service.post (f); + if (boost::this_thread::get_id() == _ui_thread) { + f (); + } else { + _service.post (f); + wake_ui (); + } } void ui_idle () { @@ -44,6 +53,7 @@ public: private: boost::asio::io_service _service; boost::asio::io_service::work _work; + boost::thread::id _ui_thread; }; extern UISignaller* ui_signaller; |
