как прикрепить обратные вызовы сигналов glib к определенному контексту потока - PullRequest
0 голосов
/ 25 апреля 2018

Итак, в основном я пишу следующие шаги для создания приложения на базе dbus.1. g_bus_watch_name (обратный вызов для конкретной службы, чтобы появиться) 2. g_signal_connect для подключения к определенным сигналам, предоставляемым службой.g_signal_connect (proxy, "xyz", G_CALLBACK (callback), NULL);

Я хочу, чтобы "обратный вызов" выполнялся в определенном контексте потока.

Любые подсказки будут высоко оценены

1 Ответ

0 голосов
/ 25 апреля 2018

Из документации GDBusProxy :

Экземпляр GDBusProxy можно использовать из нескольких потоков, но имейте в виду, что все сигналы (например, «g-signal», «g-«свойства изменены» и «уведомить») выводятся в основном контексте потока по умолчанию для потока, в котором был создан экземпляр.

Поэтому убедитесь, что GMainContext выхотите, чтобы сигналы излучались в потоке по умолчанию во время создания GDBusProxy.Типичным примером является вызов g_main_context_push_thread_default() в начале вашей функции потока, затем создание GDBusProxy и подключение к нему сигналов, а также сохранение объекта целиком в этом потоке.

Для получения дополнительной информации о рекомендуемых шаблонах для использования GMainContext см. учебник .В частности, он рекомендует иметь один GMainContext на поток (по умолчанию для этого потока) и не перемещать их между потоками.Хотя это поддерживается, перемещение контекстов между потоками происходит медленно (из-за блокировки) и очень затрудняет рассуждение о потоке управления и безопасности потока остальной части кода.

...