相关疑难解决方法(0)

为单独的g_main_loop添加回调

我对GMainLoop工作方式有一些误解.主要的东西 - 添加一些回调的API g_main_loop(比如g_timeout_add_seconds())不会指向你想要添加回调的循环.

看起来您为所有g_main_loop实例添加了回调.即使你还没有创建.简单的例子:

#include <glib.h>

gboolean callback(gpointer data)
{
  static guint16 i=0; 
  g_print("Iter=%"G_GUINT16_FORMAT"\n",i++);
  if(i%5==0){
    g_print("try to stop loop1\n");
    g_main_loop_quit((GMainLoop*)data);
  }
  return TRUE;
}

int main()
{
  GMainLoop* loop1 = NULL;
  GMainLoop* loop2 = NULL;
  loop1 = g_main_loop_new (NULL, FALSE);

  g_timeout_add_seconds(1, callback,loop1);

  loop2 = g_main_loop_new (NULL, FALSE);
  g_print("run loop1\n");
  g_main_loop_run(loop1);
  g_free(loop1);
  g_print("run loop2\n");
  g_main_loop_run(loop2);
  g_free(loop2);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

run loop1
Iter=0
Iter=1
Iter=2
Iter=3
Iter=4
try to stop loop1
run loop2 …
Run Code Online (Sandbox Code Playgroud)

loops glib

4
推荐指数
1
解决办法
8120
查看次数

标签 统计

glib ×1

loops ×1