Signal class for inter-thread communication. More...
Public Member Functions | |
Dispatcher () | |
Create new Dispatcher instance using the default main context. | |
Dispatcher (const Glib::RefPtr< MainContext >& context) | |
Create new Dispatcher instance using an arbitrary main context. | |
~Dispatcher () | |
void | emit () |
void | operator() () |
sigc::connection | connect (const sigc::slot< void >&slot) |
Signal class for inter-thread communication.
Glib::Dispatcher works similar to sigc::signal<void>. But unlike normal signals, the notification happens asynchronously through a pipe. This is a simple and efficient way of communicating between threads, and especially useful in a thread model with a single GUI thread.
No mutex locking is involved, apart from the operating system's internal I/O locking. That implies some usage rules:
Notes about performance:
write()
system call. Using Glib::Dispatcher on Windows:
Glib::Dispatcher also works on win32-based systems. Unfortunately though, the implementation cannot use a pipe on win32 and therefore does have to lock a mutex on emission, too. However, the impact on performance is likely minor and the notification still happens asynchronously. Apart from the additional lock the behavior matches the Unix implementation.
Glib::Dispatcher::Dispatcher | ( | ) |
Create new Dispatcher instance using the default main context.
Glib::FileError |
Glib::Dispatcher::Dispatcher | ( | const Glib::RefPtr< MainContext >& | context | ) | [explicit] |
Create new Dispatcher instance using an arbitrary main context.
Glib::FileError |
Glib::Dispatcher::~Dispatcher | ( | ) |
sigc::connection Glib::Dispatcher::connect | ( | const sigc::slot< void > & | slot | ) |
void Glib::Dispatcher::emit | ( | ) |
void Glib::Dispatcher::operator() | ( | ) |