wakeup
Description:
public void wakeup ()
If this is currently blocking in iteration waiting for a source to become ready, cause it to stop blocking and return.
Otherwise, cause the next invocation of iteration to return without blocking.
This API is useful for low-level control over MainContext; for example, integrating it with main loop implementations such as MainLoop.
Another related use for this function is when implementing a main loop with a termination condition, computed from multiple threads:
#define NUM_TASKS 10
static gint tasks_remaining = NUM_TASKS; // (atomic)
...
while (g_atomic_int_get (&tasks_remaining) != 0)
g_main_context_iteration (NULL, TRUE);
Then in a thread:
perform_work();
if (g_atomic_int_dec_and_test (&tasks_remaining))
g_main_context_wakeup (NULL);
Parameters:
this |
a MainContext (if null, the global-default main context will be used) |