Здравствуйте, reversecode, Вы писали:
R>гугл забит и решением вашей проблемы и примерами
В гугле действительно много вопросов вида "цикл обработки событий не работает в в GUI приложении на Java" без ответов. Суть вопроса в том, что вообще, принципиально я смогу использовать блокирующие сокеты (так по логике им нафиг нужен цикл обработки событий) и не бояться что без QApplication у меня возникнут сюрпризы.
QObject::connect: Cannot connect (null)::destroyed() to QHostInfoLookupManager::waitForThreadPoolDone()
гугл забит ответами о обсуждениями когда и как это появляется
и как фиксить
так что не надо "ляля"
Если вы новичок код желательно выкладывать более обширно для понимания читателей, ошибки бывают разные и в разных местах. Так же вам могут посоветуют как надо и как не надо оформлять код.
Q>приложение работает. Но, постоянно вылетает предупреждение
Если вылетают ошибки спорно, что оно работает. Q>
Q>QObject::connect: Cannot connect (null)::destroyed() to QHostInfoLookupManager::waitForThreadPoolDone()
Q>
google
У меня первое же сообщение на stackoverflow ведет:
Q>Что оно означает и какие проблемы могут возникнуть при работе приложения? Можно ли его отключить?
Q>Имеются ли примеры синхронного использования сокетов в Qt? https://doc.qt.io/qt-5/qtnetwork-broadcastsender-example.html
Другие примеры: https://doc.qt.io/qt-5/examples-network.html
Q>P.S. Предупреждение исчезает, если посредством QCoreApplication запустить главную петлю обработки событий, но мне не нужна эта петля.
Не понимаю.
Здравствуйте, qtprogger, Вы писали:
Q>Написал некий синхронный клиент на QSocket и блокирующими методами Q>...
Q>P.S. Предупреждение исчезает, если посредством QCoreApplication запустить главную петлю обработки событий, но мне не нужна эта петля.
Это цикл обработки сообщений. Сокетам он нужен, они в кутэ по определению асинхронные. Даже при использовании блокирующих операций.
Как вариант — можно локально гонять QEventLoop в том месте где вам нужна синхронность и прибивать его по срабатыванию нужного сигнала.
Здравствуйте, SaZ, Вы писали:
SaZ>Как вариант — можно локально гонять QEventLoop в том месте где вам нужна синхронность и прибивать его по срабатыванию нужного сигнала.
Пробовал QEventLoop, но он без QApplication не хочет работать.
Здравствуйте, qtprogger, Вы писали:
Q>Здравствуйте, SaZ, Вы писали:
SaZ>>Как вариант — можно локально гонять QEventLoop в том месте где вам нужна синхронность и прибивать его по срабатыванию нужного сигнала.
Q>Пробовал QEventLoop, но он без QApplication не хочет работать.
Q>>Пробовал QEventLoop, но он без QApplication не хочет работать.
SaZ>Ну так создайте его 1 раз где нибудь.
Вот в этом то и проблема. Я в топике не донес проблему.
Мне нужно сунуть синхронные сокеты в метод динамической библиотеки, которая используется не в Qt-GUI.
При создании в отдельном std::thread конструкции вида
QCoreApplication app(/*...*/);
//... работают сокеты
app.exec();
Возникает сообщение
WARNING: QApplication was not created in the main() thread.
и ничего не работает.
P.S. более точно, вот так пытался завести клиента, в методе динамической библиотеки, не получилось. Если без QApplication обойтись нельзя, то Qt не поможет.