QSocket как blocking socket
От: qtprogger  
Дата: 14.06.20 21:30
Оценка:
Написал некий синхронный клиент на QSocket и блокирующими методами
waitForConnected()
waitForBytesWritten()
waitForReadyRead()

приложение работает. Но, постоянно вылетает предупреждение
QObject::connect: Cannot connect (null)::destroyed() to QHostInfoLookupManager::waitForThreadPoolDone()



Что оно означает и какие проблемы могут возникнуть при работе приложения? Можно ли его отключить?

Имеются ли примеры синхронного использования сокетов в Qt?

P.S. Предупреждение исчезает, если посредством QCoreApplication запустить главную петлю обработки событий, но мне не нужна эта петля.
qt qsocket blocking
Re: QSocket как blocking socket
От: reversecode google
Дата: 14.06.20 22:09
Оценка:
гугл забит и решением вашей проблемы и примерами
купите уже себе книгу — гугл для новичков
если не умеете гуглить
Re[2]: QSocket как blocking socket
От: qtprogger  
Дата: 15.06.20 08:01
Оценка:
Здравствуйте, reversecode, Вы писали:

R>гугл забит и решением вашей проблемы и примерами



В гугле действительно много вопросов вида "цикл обработки событий не работает в в GUI приложении на Java" без ответов. Суть вопроса в том, что вообще, принципиально я смогу использовать блокирующие сокеты (так по логике им нафиг нужен цикл обработки событий) и не бояться что без QApplication у меня возникнут сюрпризы.
Re[3]: QSocket как blocking socket
От: reversecode google
Дата: 15.06.20 08:26
Оценка: -1
QObject::connect: Cannot connect (null)::destroyed() to QHostInfoLookupManager::waitForThreadPoolDone()
гугл забит ответами о обсуждениями когда и как это появляется
и как фиксить
так что не надо "ляля"
Re: QSocket как blocking socket
От: Dambo Россия  
Дата: 15.06.20 10:14
Оценка: 1 (1)
Здравствуйте, qtprogger, Вы писали:

Q>Написал некий синхронный клиент на QSocket и блокирующими методами

Q>
Q>waitForConnected()
Q>waitForBytesWritten()
Q>waitForReadyRead()
Q>

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

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 запустить главную петлю обработки событий, но мне не нужна эта петля.

Не понимаю.
Re: QSocket как blocking socket
От: SaZ  
Дата: 15.06.20 16:38
Оценка: 1 (1)
Здравствуйте, qtprogger, Вы писали:

Q>Написал некий синхронный клиент на QSocket и блокирующими методами

Q>...

Q>P.S. Предупреждение исчезает, если посредством QCoreApplication запустить главную петлю обработки событий, но мне не нужна эта петля.


Это цикл обработки сообщений. Сокетам он нужен, они в кутэ по определению асинхронные. Даже при использовании блокирующих операций.
Как вариант — можно локально гонять QEventLoop в том месте где вам нужна синхронность и прибивать его по срабатыванию нужного сигнала.
Re[2]: QSocket как blocking socket
От: qtprogger  
Дата: 16.06.20 15:03
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Как вариант — можно локально гонять QEventLoop в том месте где вам нужна синхронность и прибивать его по срабатыванию нужного сигнала.


Пробовал QEventLoop, но он без QApplication не хочет работать.
Re[3]: QSocket как blocking socket
От: SaZ  
Дата: 16.06.20 20:45
Оценка:
Здравствуйте, qtprogger, Вы писали:

Q>Здравствуйте, SaZ, Вы писали:


SaZ>>Как вариант — можно локально гонять QEventLoop в том месте где вам нужна синхронность и прибивать его по срабатыванию нужного сигнала.


Q>Пробовал QEventLoop, но он без QApplication не хочет работать.


Ну так создайте его 1 раз где нибудь.
Re[4]: QSocket как blocking socket
От: qtprogger  
Дата: 16.06.20 21:35
Оценка:
Здравствуйте, SaZ, Вы писали:


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 не поможет.
    Client * client = nullptr;
     std::thread th
      (
          [&]
          {
              QCoreApplication app(argc, argv);
              client = new Client;
              return app.exec();
         }
     );
     
     th.detach();
     while(!client)
     {
         qDebug() << "nulptr";
         QThread::usleep(1000);
     }
    client->setHostName("localhost");
Отредактировано 16.06.2020 21:42 qtprogger . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.