Заголовок очень загадочный, вот так!
Я пишу клиент, который ведет себя очень синхронно.Из-за структуры протокола и сервера все должно происходить последовательно (отправка запроса, ожидание ответа, ответ службы и т. Д.), Поэтому я использую блокирующие сокеты.Вот где приходит Qt.
В моем приложении у меня есть поток GUI, поток обработки команд и поток движка сценариев.Я создаю QTcpSocket в потоке обработки команд, как часть моего класса Client.Класс Client имеет различные методы, которые сводятся к записи в сокет, чтению определенного количества байтов и возвращению результата.
Проблема возникает, когда я пытаюсь напрямую вызывать методы Client из потока механизма сценариев,Сокеты Qt случайным образом истекают , и при использовании отладочной сборки Qt я получаю следующие предупреждения:
QSocketNotifier: socket notifiers cannot be enabled from another thread
QSocketNotifier: socket notifiers cannot be disabled from another thread
Каждый раз, когда я вызываю эти методы из потока обработки команд (где был создан клиент)), Я не получаю эти проблемы.
Чтобы просто сформулировать ситуацию:
Вызов функций блокировки QAbstractSocket
, как waitForReadyRead()
, из потока другойчем тот, где сокет был создан (динамически размещен), вызывает случайное поведение и отладочные утверждения / предупреждения.
Кто-нибудь еще сталкивался с этим?Пути вокруг этого?
Заранее спасибо.