Чтение сетевых данных без readyread() |
Здравствуйте, гость ( Вход | Регистрация )
Чтение сетевых данных без readyread() |
KuvshinoF |
22.4.2021, 10:10
Сообщение
#1
|
Студент Группа: Участник Сообщений: 74 Регистрация: 25.7.2013 Пользователь №: 3887 Спасибо сказали: 0 раз(а) Репутация: 0 |
Задача следующая - постоянно корректно читать сетевые данные (предполагается при запуске потока запускать таймер вычитывания (если они есть конечно) раз в секунду данных из сети). Пример выше не работает - говорит "timer cannot be started from another thread". DataTimer обязателен для некой обработки ситуации отсутствия сетевых данных. И как лучше читать данные - как в примере выше или вместо if сделать while с int size=socket.pendingdatagramsize();? Или лучше как-то по-другому считывать данные? (пробовал вместо таймера запуска чтения данных использовать while(1) {чтение данных} прямо в run, но тогда возникает та же ошибка с таймером DataTimer, который обязателен) |
|
|
Алексей1153 |
23.4.2021, 17:42
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
KuvshinoF, make_unique в C++14 добавлен. А вообще - смело включай 17, а то он уже слегка устаревать начиниет ))
если не разрешают новые стандарты, тогда так
Я сам таймеры в других потоках не создавал (как бы без надобности, у меня в бесконечном цикле используется класс, который отсчитывает пройденный интервал времени пассивно, то есть это выясняется проверкой) но в доке написано так Цитата In multithreaded applications, you can use QTimer in any thread that has an event loop. To start an event loop from a non-GUI thread, use QThread::exec(). Qt uses the timer's thread affinity to determine which thread will emit the timeout() signal. Because of this, you must start and stop the timer in its thread; it is not possible to start a timer from another thread.
|
|
|
Текстовая версия | Сейчас: 28.4.2024, 18:28 |