Вопрос

Когда я выполняю «dbus_connection_close», нужно ли мне очищать очередь сообщений?

Другими словами, нужно ли мне продолжать «dbus_connection_read_write_dispatch» до тех пор, пока я не получу индикацию «отключено», или безопасно прекратить отправку?

Обновлено: Мне нужно закрыть соединение с DBus чистым способом.Судя по чтению документации, вся очистка должна быть выполнена до «отмены ссылки» на соединение, и этот процесс, по моему мнению, не очень хорошо документирован.

Это было полезно?

Решение

После некоторого копания выяснилось, что существует два типа подключения:общий и частный.

Общее соединение не должен быть закрытым просто без ссылки.Кроме того, не похоже, что соединение должно быть очищено и отправлено. пока не исходящие сообщения должны быть доставлены.

В моем случае мне просто нужно было как можно скорее прекратить общение через DBus, не пытаясь спасти исходящие сообщения.

Таким образом, краткий ответ:НЕТ – промывка/отправка не требуется перед dbus_connection_unref.

Другие советы

Смотрящий в документации для dbus_connection_close(), единственное, что может быть вызван — это функция состояния отправки, указывающая, что соединение закрыто.

Итак, заказывая здесь, это то, на что вы наверняка захотите обратить внимание..то есть получение уведомления о закрытом/разорванном соединении до того, как что-то останется в очереди сообщений.

Глядя на источник функции, похоже, единственное, что он собирается сделать, это вернуться в случае неудачи, т.е.неверное соединение/NULL-указатель.Иначе (кажется) просто зависнет.

Это означает, что да, вам, вероятно, следует очистить очередь сообщений перед тем, как повесить трубку.

Отказ от ответственности:Мне приходилось разговаривать с dbus всего несколько раз, я ни в коем случае не являюсь авторитетом в этом вопросе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top