Add some comments.
authorCarl Hetherington <cth@carlh.net>
Thu, 25 Oct 2012 21:37:33 +0000 (22:37 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 25 Oct 2012 21:37:33 +0000 (22:37 +0100)
src/lib/ui_signaller.cc
src/lib/ui_signaller.h

index 4f39a618763d8d6d07558129ced94cd1288c7620..4cb34da51cd38bbee255b6c9da1f4d4d1d681257 100644 (file)
@@ -19,5 +19,6 @@
 
 #include "ui_signaller.h"
 
+/** Global UISignaller instance */
 UISignaller* ui_signaller = 0;
 
index 9de1b736ddf6246b4e7ac7b37598d50746bbe2f6..221bcbe9581ad2cdfaacdcaaeabf4487ab6e6723 100644 (file)
@@ -24,6 +24,9 @@
 #include <boost/asio.hpp>
 #include <boost/thread.hpp>
 
+/** A class to allow signals to be emitted from non-UI threads and handled
+ *  by a UI thread.
+ */
 class UISignaller
 {
 public:
@@ -33,26 +36,38 @@ public:
        {
                _ui_thread = boost::this_thread::get_id ();
        }
-       
+
+       /** Emit a signal from any thread whose handlers will be called in the UI
+        *  thread.  Use something like:
+        *
+        *  ui_signaller->emit (boost::bind (boost::ref (SomeSignal), parameter));
+        */
        template <typename T>
        void emit (T f) {
                if (boost::this_thread::get_id() == _ui_thread) {
+                       /* already in the UI thread */
                        f ();
                } else {
+                       /* non-UI thread; post to the service and wake up the UI */
                        _service.post (f);
                        wake_ui ();
                }
        }
 
+       /** Call this in the UI when it is idle */
        void ui_idle () {
                _service.poll ();
        }
 
+       /** This should wake the UI and make it call ui_idle() */
        virtual void wake_ui () = 0;
 
 private:
+       /** A io_service which is used as the conduit for messages */
        boost::asio::io_service _service;
+       /** Object required to keep io_service from stopping when it has nothing to do */
        boost::asio::io_service::work _work;
+       /** The UI thread's ID */
        boost::thread::id _ui_thread;
 };