我正在使用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主循环支持自定义事件源 。 我对FUSE知之甚少,但您可以在另一个线程中运行FUSE的主循环,并将其事件集成到GLib循环中。
快速搜索表明您可以使用较低级别的FUSE API来编写自己的主循环 ,这可以通过简单地跳过“循环”部分更容易地集成到GLib中。
但总的来说,多个主循环只是坏消息; 这就是为什么他们被称为主循环。 :)处理它们的最好方法是通过将事件直接挂接到最适合您的循环来消除它们。 不幸的是,并非所有API都提供足够的钩子来实现这一点。
除了在一个单独的线程或一个进程中设置主循环(从我所拥有的一点点经验中,单独的进程对我来说效果更好但是再次线程可能在你的情况下运行良好),你可以考虑集成fuse主循环在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
( 诺基亚开发者页面上的更多信息 )。
希望这可以提供一些提示!
需要了解更多c/c++开发分享可以运行多个主循环?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享可以运行多个主循环?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979112.html