|
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
|
|||||||||||||||||||||
QtConcurrent::run() многоразовый вызов, очередность получения QFuture::result()13.10.2017, 17:55. Показов 13129. Ответов 36
Метки нет (Все метки)
Задача следующая - есть файл, большой файл. Нужно провести по нему определенные операции - декодирование. Однопоточно это делать медленно, соответственно многопоточность реализована через QtConcurrent.
Для решения я пробовал:
Вопрос, как заставить их приходить в порядке запуска? Пробовал работать с QtConcurrent::mapped(), но проблема в том, что map требует QFuture той-же размерности, что и Sequence, а я передаю в потоки не сам массив данных, прочитанных из файла, а позицию в файле. Файл читается по мере обработки. Если же передавать массив данных - при вызове map, файл просто целиком попытается грузануться в память. Это проблема. QtConcurrent::mappedReduced() не подходит по той причине, что декодируемые блоки могут рваться и, как результат, надо будет останавливать все это дело и начинать поиск последовательности где-то в середине блока. QtConcurrent::run() в данном случае подходит отлично, кроме того момента, что будущие результаты возвращаются не в том порядке. Как можно решить эту проблему?
0
|
|||||||||||||||||||||
| 13.10.2017, 17:55 | |
|
Ответы с готовыми решениями:
36
О странностях QtConcurrent+QFuture+QFutureWatcher
Вызов QtConcurrent приводит к зависанию GUI |
|
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
|
|||
| 17.10.2017, 15:28 [ТС] | |||
|
Добавлено через 2 минуты
0
|
|||
|
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
|
||
| 17.10.2017, 15:43 [ТС] | ||
|
Сигналы, кстати, будут работать медленнее. А скорость выполнения у меня - на первом месте.
0
|
||
|
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
|
|||
| 17.10.2017, 16:01 [ТС] | |||
|
0
|
|||
|
|
||
| 17.10.2017, 16:16 | ||
rocessEvents(); (который тоже позволяет выполнятся слотам и тоже "жгет ваши спички") Вы его выпиливать отказались, на чем разговор закрыт.
0
|
||
|
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
|
|
| 17.10.2017, 16:47 [ТС] | |
|
Avazart, а схрена-ли я должен выпиливать то, что не имеет отношения к заданному вопросу? Вы уверены что правильно прочитали вопрос темы? Объясните тогда, как QCoreApplication:
rocessEvents(), находящийся в другом месте, связан с вопросом темы?)QCoreApplication: rocessEvents() можно вообще удалить и не чистить память. Но проблемы это - не решит.
0
|
|
| 17.10.2017, 16:52 | |
|
Если вы написали код,в соответствии с доками,а он не работает, и уверены,что вашей ошибки нет-напишите разработчикам.
Оставьте заявку на bug traacker-е. В течении недели ответят. Если, то, что вы говорите правда,и проблема в QT- надо исправлять. (тем более управление потоками-критичная секция) Лично напарывался на такие проблемы.
0
|
|
| 17.10.2017, 16:56 | |
|
Не по теме: Да проблема не в Qt а в кривых руках, это уже выяснили.
0
|
|
|
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
|
||
| 17.10.2017, 17:03 [ТС] | ||
|
saqef, пожалуй. Всем спасибо за ответы!
Добавлено через 6 минут Не по теме: У кого кривые руки мы выяснили еще когда обсуждали работу с потоками в Qt в прошлый раз. Толку в ваших намеках на "кривые руки" - нет. Это мало того, что не решение проблемы, но и к ней никакого отношения не имеет в принципе. Кстати, если делать сигналами, то придется тоже делать вызов QCoreApplication: rocessEvents() в обработчике сигнала, если поток 3 придет раньше потока 2. Просто что бы обработчик не "повис" и дал прийти сигналу со вторым куском. Либо класть все это куда-то в другой массив, но это уже снова сильно жрет память. Я этого делать избегаю.
0
|
||
|
|
|
| 17.10.2017, 17:14 | |
|
0
|
|
|
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
|
||
| 17.10.2017, 17:30 [ТС] | ||
rocessEvents(), это, и правда, было бы корректнее, даже с учетом моих особенностей. Или вообще QAbstractEventDispatcher: rocessEvents( ). Но в моем случае это проблем не вызывает. Вызывается этот обработчик, когда работа должна быть остановлена и только тогда, при отмене обработки. Это видно в коде.
0
|
||
|
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
|
||
| 17.10.2017, 17:49 [ТС] | ||
|
0
|
||
|
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
|
|
| 01.11.2017, 16:16 [ТС] | |
|
Косяк был в алгоритме, QFutureSynchronizer отрабатывал как надо. Всем спасибо.
0
|
|
| 01.11.2017, 16:16 | |
|
Помогаю со студенческими работами здесь
37
Как в классе Thread реализован вызов run(), если метод run() определён в АВТОРСКОМ классе? При вызове метода не возвращается значение. (вызов a.result) Вызов Run для Excelя из C# не работает
Передача json массива и вызов метода для получения результатов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива
Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
|
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так?
Да, всё верно. Я — искусственный интеллект.
Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
|
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает.
В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше.
Перед запуском проверяем. . .
|
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов.
В Main создаём четыре события. . . .
|
|
Модель здравоохранения 12. добавление болезней через ресурпул, как аварии
anaschu 22.05.2026
Болезни — это ключевая часть нашей модели. Нам нужно, чтобы работник периодически уходил на больничный, его задание при этом зависало, а после выздоровления работа возобновлялась. Реализуем это двумя. . .
|
Модель здравоохранения 11. Создаём классы Задание и Работник
anaschu 22.05.2026
В AnyLogic каждая заявка и каждый ресурс — это объект определённого класса. Нам нужно создать два класса: Задание (заявка) и Работник (ресурс).
Класс Задание
В дереве проекта нажимаем правой. . .
|
Модель здравоохранения 10. Новая модель, смотрим, как добавлять логические блоки, и что писать внутри
anaschu 22.05.2026
Открываем AnyLogic, создаём новый проект. В дереве проекта появляется класс Main — это главный агент, в котором будет жить вся наша логика.
Палитра блоков
Слева находится палитра. Нас интересует. . .
|
модель ЗдравоСохранения 9. Новая модель, разбираемся, как ее создавать
anaschu 22.05.2026
В этой серии постов мы построим модель небольшого рабочего коллектива. Сотрудники получают задания, выполняют их, иногда болеют — и мы хотим посчитать, сколько это стоит компании.
Метод. . .
|