ben*_*ier 7 c glib fuse event-loop
我正在使用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);
Run Code Online (Sandbox Code Playgroud)
但是,glib事件循环不会接收任何触发的事件.我在这里完全偏离基地吗?解决多个主循环的正确方法是什么?
除了在单独的线程或进程中设置主循环(根据我的一点经验,单独的进程对我来说效果更好,但线程在您的情况下可能效果很好),您可以考虑集成熔丝主循环在 GLib 的主循环中(不幸的是我以前没有这方面的经验)。您可以查看此主题的相同讨论(如果您还没有看到它)。正如线程末尾所建议的那样" Register the fuse device file descriptor
(fuse_chan_fd()) with the glib event loop. Then call fuse_chan_recv()
and fuse_session_process() when the event trigger"。要跟踪 fd,您需要使用GIO(有关诺基亚开发人员页面的更多信息)。
希望这可以提供一些提示!