gpt4 book ai didi

c - 可以运行多个主循环吗?

转载 作者:太空狗 更新时间:2023-10-29 17:10:14 24 4
gpt4 key购买 nike

我同时使用 libfuse 和 glib 事件接口(interface),我遇到了一个问题,我需要同时运行多个主循环(glib 的 g_main_loop_runfuse_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 主循环支持 custom event sources .我不太了解 FUSE,但您可以在另一个线程中运行 FUSE 的主循环,并将其事件集成到 GLib 循环中。

快速搜索表明您可以使用较低级别的 FUSE API 来编写 your own main loop ,通过简单地跳过“循环”部分,大概可以更容易地将其集成到 GLib 中。

不过,一般来说,多个主循环只是个坏消息;这就是它们被称为主要 循环的原因。 :) 处理它们的最佳方法是通过将事件直接挂接到最适合您的任何循环来消除它们。不幸的是,并非所有 API 都提供足够的钩子(Hook)来实现这一点。

关于c - 可以运行多个主循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8529483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com