方法

GLibMainContextwakeup

声明 [源]

void
g_main_context_wakeup (
  GMainContext* context
)

描述 [源]

如果 context 当前在 g_main_context_iteration() 中阻塞等待某个源准备好,会引起它停止阻塞并返回。否则,导致下一次调用 g_main_context_iteration() 时不阻塞并返回。

API 用于对 GMainContext 进行低级控制;例如,将其与 GMainLoop 这样的主要循环实现集成。

此函数的另一个相关用途是在实现具有多个线程计算终止条件的主循环时

  #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);

然后在一个线程中

  perform_work();

  if (g_atomic_int_dec_and_test (&tasks_remaining))
    g_main_context_wakeup (NULL);