如何使用DBusWatch函数接收异步请求?

时间:2014-11-27 12:17:26

标签: dbus

我已经看过DBusWatch and DBusTimeout examples中说明的程序,但我不明白为什么在dispatch()函数中使用以下代码:

while (dbus_connection_get_dispatch_status(c) == DBUS_DISPATCH_DATA_REMAINS)
    dbus_connection_dispatch(c);

1 个答案:

答案 0 :(得分:1)

dbus_connection_dispatch()触发dbus库中的顶级主循环操作,后者又将操作步骤调度到其他函数中。实际的总线消息接收应该在用户处理函数中。

它可以是the bind9 code by apple上的一个例子。根据我的阅读,在这些步骤中触发消息处理:

  • select()在主循环中返回,并由dbus监视设置fd
  • 主循环调用process_watches(),它遍历树并调用process_watch()
  • 最后,看起来dbus消息是通过

    调用来处理的

    (*(cs-> mf))(cs,type,reply,serial,dest,path,member,interface,0L,         发件人,签名,消息,0L,0L,0L,cs-> def_mf_obj);

cs->mf应该持有由dbus_svc_add_filter()添加的用户处理函数。