2017-11-30 1 views
0

Beim Aufruf dbus_connection_send_with_reply über die D-Bus-C-API in Linux, gebe ich eine Zeitüberschreitung von 1000ms, aber die Zeitüberschreitung tritt nie auf, wenn die empfangende Anwendung nicht antwortet.dbus_connection_send_with_reply timeout

Wenn die empfangende Anwendung eine Antwort sendet, wird diese korrekt empfangen.

Könnte dies aufgrund der Art und Weise sein, die ich libdbus bediene?

Ich rufe regelmäßig dbus_connection_dispatch und dbus_connection_dispatch zur Wartung.

Dank

+2

Ein [MCVE] (https:// Stackoverflow.com/help/mcve) könnte helfen ... – Gerhardh

Antwort

1

Es sehr ist empfehlenswert, dass Sie andere als libdbus eine D-Bus-Bibliothek verwenden, wie libdbus knifflig ist richtig zu verwenden, wie Sie zu finden sind. Wenn möglich, verwenden Sie stattdessen GDBus oder QtDBus, da es sich um viel höhere Ebenen handelt, die einfacher zu verwenden sind. Wenn Sie eine Bindung auf niedrigerer Ebene benötigen, ist sd-bus moderner als libdbus.

Wenn Sie GDBus verwenden, können Sie GMainLoop verwenden, um eine Hauptschleife zu implementieren Timeouts zu handhaben, und stellen Sie die Timeout-Zeit mit g_dbus_proxy_set_default_timeout() oder in den Argumenten zu einzelnen g_dbus_proxy_call() Anrufen. Wenn Sie den SD-Bus verwenden, können Sie sd-event verwenden.