bluez glib编程 --- main loop(主循环)

主循环是事件驱动编程的核心概念,广泛应用于图形用户界面(GUI)和其他需要持续处理事件的应用中。它的主要作用是不断地检查和处理事件,如用户输入、网络数据、定时器等。

在一个典型的主循环中,应用程序会做以下工作:

  • 检查是否有任何事件发生(如鼠标点击、键盘输入)。
  • 处理这些事件并执行相应的回调函数。
  • 如果没有事件发生,则应用程序通常会等待(通常是阻塞操作),直到有事件需要处理。

在 Linux 环境下,许多 GUI 库如 GTK 和 Qt 都实现了自己的主循环。例如,GTK 使用 GMainLoop 进行事件处理。GLib 提供了对 D-Bus 的支持,将 D-Bus 消息处理集成到 GMainLoop 中。

 

所以

#include <glib.h>
#include <gio/gio.h>

int main(int argc, char *argv[]) {
    GMainLoop *loop = g_main_loop_new(NULL, FALSE);
    GDBusConnection *connection;
    GError *error = NULL;

    connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
    if (error != NULL) {
        g_printerr("Error connecting to D-Bus: %s\n", error->message);
        g_error_free(error);
        return 1;
    }

    // 设置 D-Bus 信号处理等

    g_main_loop_run(loop); // 调用 g_main_loop_quit(loop) 可退出循环

    // 清理资源
    g_main_loop_unref(loop);
    g_object_unref(connection);

    return 0;
}

 

posted @ 2024-07-22 20:23  流水灯  阅读(165)  评论(0)    收藏  举报