Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: vregess от Февраль 25, 2015, 20:40



Название: Мониторинг асинхронных задач
Отправлено: vregess от Февраль 25, 2015, 20:40
Внутри программы есть некий сервис, который крутится в отдельном потоке. Допустим он загружает картинки в фоне или что-то тянет из сети. Есть несколько клиентов, которые отправляют асинхронные запросы сервису, а он в свою очередь должен отправлять готовые данные (картинку) запросившему их клиенту.

Основная идея в том, что сервис должен различать клиентов, как-то оповещать их о состоянии задачи и передавать результат.

Было бы не плохо иметь что-то похожее на QFuture/QFutureWatcher, жалко их нельзя в собственных целях использовать. Реализовать свой QFuture или есть более другие решения?

Хотелось бы услышать мнения.

PS если уже обсуждалось, ткните ссылкой.


Название: Re: Мониторинг асинхронных задач
Отправлено: nwnclv от Февраль 26, 2015, 11:05
Цитировать
Основная идея в том, что сервис должен различать клиентов,
ну и в чем проблема скормить с заданием ID какой-нибудь?
Или скормить объект, которому потом сервис вышлет сигнал, или зарегистрировать некий коллбек, который сервис дернет по окончанию обработки конкретного задания. Или, если тот, кто ставит задание сервису должен синхронно его ждать, то очередь с ожиданием. ... Вариантов много. выбирай какой больше подходит.



Название: Re: Мониторинг асинхронных задач
Отправлено: Fregloin от Февраль 26, 2015, 15:25
я бы посоветовал пул потоков для такой задачи, где несколько клиентов что то запрашивают и ожидают получить в ответ


Название: Re: Мониторинг асинхронных задач
Отправлено: vregess от Февраль 26, 2015, 21:28
ну и в чем проблема скормить с заданием ID какой-нибудь?
Или скормить объект, которому потом сервис вышлет сигнал, или зарегистрировать некий коллбек, который сервис дернет по окончанию обработки конкретного задания.
Сам пока думаю о неком прокси объекте, который передавать сервису. А сервис будет через него слать сигналы клиенту (вот что-то типа QFuture и получается по сути).
Проблемы нет, как раз и хотел больше конкретики, как реализовать.

я бы посоветовал пул потоков для такой задачи, где несколько клиентов что то запрашивают и ожидают получить в ответ

В моем случае лучше чтобы сервис крутился все время, а не временно помещать задачу в поток, да и в главном потоке он тоже может работать. Например, сервис с использованием QNAM может работать асинхронно в главном потоке.