如何选择在 dbus 中调度消息的正确方法



据我所知,从dbus队列中调度消息有三种方法,dbus_connection_set_watch_functions/dbus_connection_dispatch/dbus_connection_register_object_path,我不知道它们的细节,所以我无法选择正确的函数来调度消息,我对这些概念感到困惑,它们之间是否有一些关系, 还是它们是相互依存的?

任何想法都将非常受欢迎。

谢谢。

好的,我想也许我已经从common_api的源代码中得到了答案,正如common_api用例所示,当您获得新连接时,DBusWatch 将从 libDbus 代码创建,然后您可以调用以向 dbus_connection_set_watch_functions 注册 DBusWatch 回调,其中一个参数表示附加回调, 它的类型是 DBusAddWatchFunction,表示一旦将新的 DBusWatch 添加到列表中,就会调用回调,除此之外,回调会在执行dbus_connection_set_watch_functions时被调用,参数包括一个 DBusWatch,而一个 DBusWatch 代表一个文件描述符,这个 DBusWatch 代表套接字 fd,所以在这个回调中, 您可以使用 FD 运算符来监视 FD,例如轮询。如果有人向这个套接字写入了一些内容,你可以在内容中读取,那么你可以解析它并将它们传递给dbus_connection_dispatch,dbus_connection_dispatch将分三个步骤操作消息:

首先,任何方法回复都传递给 DBusPendingCall 或 dbus_connection_send_with_reply_and_block() 以完成挂起的方法调用。

其次,运行使用 dbus_connection_add_filter() 注册的任何过滤器。如果任何筛选器返回DBUS_HANDLER_RESULT_HANDLED则处理在该筛选器之后停止。

第三,如果消息是方法调用,则将其转发到使用 dbus_connection_register_object_path() 或 dbus_connection_register_fallback() 添加的任何已注册对象路径处理程序。

最新更新