方法
GLibMainContextpusher_new
自:2.64
声明 [源]
GMainContextPusher*
g_main_context_pusher_new (
GMainContext* main_context
)
描述 [源]
使用 g_main_context_push_thread_default()
将 main_context
作为当前线程的新线程默认主上下文,并返回一个新的 GMainContextPusher
。使用 g_main_context_pusher_free() 清除。在使用 g_main_context_pop_thread_default()
时,如果在 main_context
上存在 GMainContextPusher
,可能会导致未定义行为。
不允许在同一作用域内使用两个 GMainContextPusher
,因为它会导致未定义的弹出顺序。
此方法旨在与 g_autoptr() 一起使用。请注意,g_autoptr()
仅在编译 GCC 或 clang 时可用,因此以下示例仅适用于这些编译器
typedef struct
{
...
GMainContext *context;
...
} MyObject;
static void
my_object_do_stuff (MyObject *self)
{
g_autoptr(GMainContextPusher) pusher = g_main_context_pusher_new (self->context);
// Code with main context as the thread default here
if (cond)
// No need to pop
return;
// Optionally early pop
g_clear_pointer (&pusher, g_main_context_pusher_free);
// Code with main context no longer the thread default here
}
自 2.64 以来可用