方法

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 以来可用

返回值

类型: GMainContextPusher

一个 GMainContextPusher

方法调用者对返回的数据拥有所有权,并负责释放它。