小编Ole*_*olf的帖子

基于 C 中的“退出”标志正确终止 GLib 主循环

我意识到这可能是一个新手 GLib 问题,但我很难在下面找到解决我的问题的代码示例。所以在我走错路之前,我希望得到你的建议。

我的代码侦听 D-Bus 消息。一条 D-Bus 消息是一条“退出”消息,旨在指示主循环关闭。如果主循环中没有其他任务,一个简单的解决方案可能是简单地调用g_main_loop_run()下面的代码,并在g_main_loop_quit()收到“退出”消息时执行 D-Bus 消息处理代码(此处未显示)。

但是,我更喜欢由主循环做出退出的决定,除了侦听 D-Bus 消息之外,它又可以执行各种其他任务。设置工作 D-Bus 服务器后,以下代码按预期执行此操作:

GMainLoop *glib_mainloop = g_main_loop_new( NULL, false );
/* Set up the D-Bus connection to work in the GLib event loop. */
dbus_connection_setup_with_g_main( dbus_connection, NULL );

/* Run the GLib event loop. */
GMainContext *glib_context = g_main_context_default( );
while( quit_indicator == false )
{
    g_main_context_iteration( glib_context, /*allow blocking=*/false );
    /* Do a variety of other tasks. */
}

g_main_loop_quit( glib_mainloop );
Run Code Online (Sandbox Code Playgroud)

注意:以上是用于说明我的问题的最少代码,我知道主循环中的“其他任务”可能更好地由线程、 …

c glib

3
推荐指数
1
解决办法
2077
查看次数

标签 统计

c ×1

glib ×1