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

Posted

技术标签:

【中文标题】如何使用 DBusWatch 函数接收异步请求?【英文标题】:How to use DBusWatch functions to receive asynchronous requests? 【发布时间】:2015-01-26 01:10:51 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

dbus_connection_dispatch() 触发 dbus 库中的***主循环动作,然后将动作步骤分派到其他函数中。实际的总线消息接收应该在用户处理函数中。

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

select() 在主循环中返回,fd 由 dbus 监视设置。 主循环调用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() 添加的用户处理函数。

【讨论】:

以上是关于如何使用 DBusWatch 函数接收异步请求?的主要内容,如果未能解决你的问题,请参考以下文章

异步请求积压可视化|如何 1 分钟内快速定位函数计算积压问题

教你怎么用ajax来进行交互(入门必看)!!!

如何使用异步函数异步监听 Firestore 中的值?

ajax同步请求与异步请求的区别

在 C++ 中处理复合异步函数

多个异步请求调用一个回调函数