Смотрю примеры асинхроности https://www.qt.io/blog/asynchronous-apis-in-qt-6 Не раскрыт один момент, как после всей

цепочки отдать результат в гуи поток? Вот пример из статьи
auto future = QtConcurrent::run(download, url)
.then(createImage)
.then(processImage)
.then(show);
Допустим в методе show мы вставляем изображение в лейбл. Но вот show же выполняется в другом не гуи потоке.
Чтобы show выполнялся в гуи потоке, мне надо делать так?
auto future = QtConcurrent::run(download, url)
.then(createImage)
.then(processImage)
.then(QtFuture::Launch::Sync, show);
Если я не правильно мыслю, можете предложить свои варианты, как вы делаете у себя?

8 ответов

24 просмотра

QFutureSynchronizer<QVector<int>> sync; // Enabling sync machine. auto arrayOneFuture = QtConcurrent::run(createArray, 65536).then(leaveMoreKMax).then(sortOverload); // First array async run. auto arrayTwoFuture = QtConcurrent::run(createArray, 65536).then(leaveAliquotK).then(sortOverload); // Second array async run. sync.addFuture(arrayOneFuture); // Adding first QFuture to syncer. sync.addFuture(arrayTwoFuture); // Adding second QFuture to syncer. sync.waitForFinished(); // Awaiting for async jobs finished. QVector<int> resultVector = arrayOneFuture.result() + arrayTwoFuture.result(); // Merging arrays. Вот мой пример кода для лабки в универ который был. Из future метод result() достает результат.

Mr.Mait- Автор вопроса
TheDoctor
QFutureSynchronizer<QVector<int>> sync; // Enablin...

По доке читал что при вызове result и если результат не готов, то будет ожидание

Mr.Mait
По доке читал что при вызове result и если результ...

А еще у него есть сигнал на который можно законнектиться. А, стоп, это FutureWatcher. Но сути не меняет, можно законнектиться на сигнал и выцепить результат.

Mr.Mait- Автор вопроса
TheDoctor
screenshot А еще у него есть сигнал на который можно законнек...

На wather не обратил внимание, пойду его почитаю

Mr.Mait- Автор вопроса
TheDoctor
screenshot А еще у него есть сигнал на который можно законнек...

Попробовал QFutureWatcher, с ним нормально работает, но как-то не удобно. Было бы классно, если было бы подобное ниже. Типа done выполняется в том потоке, в котором изначально был вызван run auto future = QtConcurrent::run(download, url) .then(createImage) .then(processImage) .done(show)

Mr.Mait
Попробовал QFutureWatcher, с ним нормально работае...

ну с вотчером лишь пару строк добавить. )

Mr.Mait
Попробовал QFutureWatcher, с ним нормально работае...

В QFuture::then() можно с функцией передать контекст объект. И функция выполниться в потоке этого объекта

Mr.Mait- Автор вопроса
Олег
В QFuture::then() можно с функцией передать контек...

О, с контекстом работает как надо, благодарю за подсказку

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта