Вызов кросс-нити Qt - PullRequest
       17

Вызов кросс-нити Qt

4 голосов
/ 29 мая 2010

У меня есть приложение Qt / C ++ с обычным потоком графического интерфейса и сетевым потоком. Сетевой поток использует внешнюю библиотеку, которая имеет свой собственный цикл событий на основе select () ... поэтому сетевой поток не использует систему событий Qt.

В данный момент сетевой поток просто излучает сигналы () при возникновении различных событий, таких как успешное соединение. Я думаю, что это работает хорошо, так как механизм сигналов / слотов правильно отправляет сигналы для потока GUI.

Теперь мне нужно, чтобы сетевой поток мог вызывать поток графического интерфейса и задавать вопросы. Например, сетевой поток может потребовать, чтобы поток графического интерфейса потребовал выставить диалоговое окно, чтобы запросить пароль.

Кто-нибудь знает подходящий механизм для этого?

Моя лучшая идея на данный момент - заставить сетевой поток ждать с использованием QWaitCondition после генерации объекта (emit passwordRequestedEvent(passwordRequest);. Объект passwordRequest будет иметь указатель на конкретное QWaitCondition и поэтому может сигнализировать об этом, когда решение принято ..

Разве это разумно? или есть другой вариант?

1 Ответ

6 голосов
/ 29 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...