Russian Qt Forum
Сентября 18, 2025, 12:19
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
Выбор техники организации многопотока в QT
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Выбор техники организации многопотока в QT (Прочитано 4987 раз)
rudireg
Гость
Выбор техники организации многопотока в QT
«
:
Февраля 20, 2013, 10:49 »
Добрый день.
Хочу написать многопоточное приложение на QT.
Например регистрация аккаунтов в социальной сети, в приложении я могу указать сколько потоков хочу использовать,
и каждый поток будет делать регистрацию аккаунта параллельно с другими потоками.
Думаю схема работы должна быть такой:
Поток UI (он же главный поток) -> Создает поток управление = дав ему название Master
Далее поток Master должен создать дочерние потоки для выполнения задачи регистраций
Получается такая схема:
UI поток -> Master поток -> Дочерние потоки от Master
Когда задача выполнилась, потоки должны высвободить память и завершиться.
---------------------------------------------------
Начал читать про методы построения многопоточных приложений в QT
выяснил что можно использовать такие средства как:
1)Использовать классы с унаследованием от QThread
2)Использовать QThreadPool в связке с классами унаследованными от QRunnable
3)Использование QCuncurrent
Подскажите чем отличаются эти методы, и в каких ситуациях нужно прибегать к тому или иному методу
И подскажите какой вариант выбрать мне для реализации сетевой задачи, описание которой выше
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Выбор техники организации многопотока в QT
«
Ответ #1 :
Февраля 20, 2013, 11:53 »
Лучше использовать "малопотоки" и очереди
Записан
ArchLinux x86_64 / Win10 64 bit
rudireg
Гость
Re: Выбор техники организации многопотока в QT
«
Ответ #2 :
Февраля 20, 2013, 12:18 »
Цитата: kuzulis от Февраля 20, 2013, 11:53
Лучше использовать "малопотоки" и очереди
А можно подробнее?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Выбор техники организации многопотока в QT
«
Ответ #3 :
Февраля 20, 2013, 12:33 »
Ну QtConcurrent здесь ни при чем, он для низкоуровневых расчетов, напр по массиву. Наследование от QThread не ошибка, но необязательно, а иногда и порицается. В принципе любые нитки могут выполнять любые задачи если не связывать их наследованием.
Главное определиться с числом ниток - не будет ли оно (неконтролируемо) возрастать. Ну скажем если Вы уверены что "не более 50 ниток" - то проблем нет. Обычная техника для задач похожих на Вашу - запустить N ниток и пулять в них сигналами с QueuedConnection. Получив сигнал нитка выполняет задачу, отсылает сигнал с результатами и опять засыпает. Это не блещет скоростью но удобно и просто для реализации
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Выбор техники организации многопотока в QT
«
Ответ #4 :
Февраля 20, 2013, 17:21 »
Цитата: Igors от Февраля 20, 2013, 12:33
Ну QtConcurrent здесь ни при чем, он для низкоуровневых расчетов, напр по массиву.
Почему не причем? Это самый простой путь реализовать эту задачу.
2 rudireg: Вы перечислили средства от низкого уровня к высокому. Что выбрать решать вам, чем ниже уровень, тем с большими вещами придется разбираться.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Выбор техники организации многопотока в QT
«
Ответ #5 :
Февраля 20, 2013, 18:53 »
Цитата: Old от Февраля 20, 2013, 17:21
Почему не причем? Это самый простой путь реализовать эту задачу.
Ну если "проще = лучше", то так
Код
C++ (Qt)
#pragma omp parallel for
for
(
int
i
=
0
;
i
<
account.
size
(
)
;
++
i
)
account
[
i
]
.
register
(
)
;
И вся любовь. Но это если регистрация - достаточно простое действие
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Выбор техники организации многопотока в QT
«
Ответ #6 :
Февраля 20, 2013, 18:58 »
Цитата: Igors от Февраля 20, 2013, 18:53
Но это если регистрация - достаточно простое действие
Почему простое - любое действие.
А вы приверженец такого?
Цитата: Igors от Февраля 20, 2013, 12:33
Это не блещет скоростью но удобно и просто для реализации
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...