【发布时间】:2011-12-16 03:37:57
【问题描述】:
我正在使用 libfuse 和 glib 事件接口,我遇到了一个问题,我需要同时运行多个主循环(glib 的 g_main_loop_run 和 fuse_loop_mt)。
我已经尝试在辅助上下文下为 glib 的事件循环创建一个分离线程,例如:
static void *
event_loop(void *arg)
{
GMainLoop *event_loop;
GMainContext *context;
context = g_main_context_new();
g_main_context_push_thread_default(context);
event_loop = g_main_loop_new(context, FALSE);
g_main_loop_run(event_loop);
return NULL;
}
...
pthread_t event_thread;
pthread_attr_t thread_attr;
pthread_attr_init(&thread_attr);
pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
event_thread = pthread_create(&event_thread, &thread_attr,
event_loop, NULL);
但是 glib 事件循环不会处理任何已触发的事件。我在这里完全不在基地吗?处理多个主循环的正确方法是什么?
【问题讨论】:
-
我猜最好的方法是尽可能避免多个主循环。或者集成事件循环,这样您就可以只使用一个来接收和处理事件。
-
不幸的是,这是不可能的。我需要 glib(libevent 等)接口来利用 curl hiper 接口。保险丝,出于显而易见的原因,还需要一个主循环。
标签: c glib fuse event-loop