Re[4]: прием udp в потоке
От: 00011011  
Дата: 15.11.21 19:14
Оценка:
Здравствуйте, Zhendos, Вы писали:

Z>Вот статья от разработчиков Qt по этому поводу: https://www.qt.io/blog/2010/06/17/youre-doing-it-wrong .


Низкоуровневые API для многопоточности предполагают наличие некоторой функции создания потока, которой передается в качестве аргумента указатель на гдавную функцию потока и ее аргументы (CreateThread, pthread_create и т.д). Нечто похожее есть в QThread: static QThread *create(Function &&f, Args &&... args). Предлагаете использовать ее? Есть какие-то примеры как надо делать?

Я использовал в качестве образца официальный пример corelib/thread/mandelbrot. Там как раз через наследование от QThread. но мне наследование как таковое не нужно (как и сигналы/слоты), мне нужно просто запустить поток, не заморачиваясь с "принадлежностью" объектов к потоку, и наиболее оптимально принимать данные по udp. Поток запускается при старте программы и закрывается при ее завершении (да, нужно чтобы он не зависал при завершении, т.е. все-же какойто механизм корректного завершения).

Честно говоря, для меня оказалось удивительно что объекты Qt каким-то образом принадлежат потокам, а не просто существуют в памяти. В чем физический смысл этой принадлежности? Мне кажется, это какое-то усложненение, наверное обусловленное архитектурой Qt. Хотя я об этом где-то прочитал, и по этой причине объявил сокет изначально как локальную переменную в функции потока, а затем оказалось что он нужен и в слоте — поэтому по быстрому переделал в указатель.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.