threads_add_idle_full
Description:
[ Version ( since = "2.12" ) ]
public uint threads_add_idle_full (int priority, owned SourceFunc function)
Adds a function to be called whenever there are no higher priority events pending.
If the function returns false it is automatically removed from the list of event sources and will not be called again.
This variant of add_full calls function
with the GDK lock held. It
can be thought of a MT-safe version for GTK+ widgets for the following use case, where you have to worry about idle_callback
running in thread A and accessing self
after it has been finalized in thread B:
static gboolean
idle_callback (gpointer data)
{
// gdk_threads_enter(); would be needed for g_idle_add()
SomeWidget *self = data;
// do stuff with self
self->idle_id = 0;
// gdk_threads_leave(); would be needed for g_idle_add()
return FALSE;
}
static void
some_widget_do_stuff_later (SomeWidget *self)
{
self->idle_id = gdk_threads_add_idle (idle_callback, self)
// using g_idle_add() here would require thread protection in the callback
}
static void
some_widget_finalize (GObject *object)
{
SomeWidget *self = SOME_WIDGET (object);
if (self->idle_id)
g_source_remove (self->idle_id);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
Parameters:
priority |
the priority of the idle source. Typically this will be in the range between DEFAULT_IDLE and HIGH_IDLE |
function |
function to call |
data |
data to pass to |
notify |
function to call when the idle is removed, or null |
Returns:
the ID (greater than 0) of the event source. |