Да вы правы... следует четко определится с точной постановкой задачи, видимо я чего-то недопонимаю.
Имеются следующие задачи:
Программа работает с неограниченным кол. аккаунтов сети Инстаграм.
1) Программа загружает в себя список аккаунтов инстаграм
2) Далее, пользователь выбирает из загруженного списка аккаунтов те аккаунты, с которыми он хочет работать, например выбрал 100 штук, и каждому аккаунту назначает индивидуальное задание
Задание может состоять из нескольких операций.
Пример операций:
а) Авторизоваться
б) Сделать лайки
в) Подписаться
г) Сделать комментарий.
и т.д.
3) Допустим мы выбрали 100 наших аккаунтов для работы и назначили каждому аккаунту задание, состоящее из следующих операций:
а) Авторизоваться
б) Сделать лайки по списку пользователей (то есть каждый наш аккаунт лайкает пользователей из подготовленного списка)
в) Сделать комментарий под фото
4) Для работы со списком пользователей которых мы должны лайкнуть (либо написать комментарий), программа имеет базу игнор листов пользователей (реализованы в виде таблиц SQLite). Это что бы не повторятся в лайках. Если мы уже ранее лайкали пользователя, нет нужды второй раз его лайкать, вот для этого в программе есть игнор-листы.
Получается, что перед лайком пользователя, нужно проверить есть ли он в игнор листе, если нету, то лайкаем, а после лайка занести в игнор базу.
Базы могут быть большими, могут быть общими для всех наших аккаунтов, либо сугубо индивидуальными для каждого нашего аккаунта.
Процесс проверки и вставки пользователя в игнор-базу, я бы хотел вынести в отдельный поток
WORKER- ибо считаю это нагруженной операцией,
к тому же в будущем могут прибавиться еще проверки...
так же идет работа с логом выполнения работы каждого аккаунта...
Отсупление.......
Отправка сетевых пакетов и их прием делается посредством
QNetworkAccessManager в одном отдельном потоке, назовем его
MANAGER (который имеет EventLoop)
Поставить в очередь
MANAGERу сетевой запрос на выполнение не сложно, через сигналы и слоты
WORKER вызывает
emit doTask(Объект с данными);В итоге в очередь
MANAGERа на выполнение поступает объект содержащий в себе различные данные: cookie, URL для перехода и другие.
И что происходит дальше? Что дальше делает WORKER? WORKER блокируется и ждет ответа либо лучше его завершить?
Я хочу использовать
QThreadPool для коллекции потоков, и пока не понятно сколько он может максимум иметь потоков в работе (не считая тех потоков что в очереди на выполнение)
Просто какой смысл блокировать
WORKER и ждать? проще завершить что бы поток WORKER даром не тратил зарезервированное место в QThreadPool ... но тогда как аккаунту от имени которого выслан запрос серверу - узнать ответ сервера? Как ответ сервера поместить в структуру аккаунта?
Хотелось бы в структуре каждого аккаунта иметь
QByteArray который будет заполнятся ответом сервера, тогда
WORKERу при повторной обработке аккаунта будет понятен исход прошлых действий.
Как сохранить ответ сервера именно в структуре того аккаунта, от имени которого был послан запрос серверу? У нас ведь не 1 аккаунт а 100 штук.
В
MANAGER для работы с сетью используется сигнал
QNetworkAccessManager::finished(QNetworkReply* reply)который соединен на слот приема ответа
closeRequest(QNetworkReply*)Слот принимает как параметр объект QNetworkReply* - который содержит ответ... но в слоте нет данных о том, какому аккаунту эти данные принадлежат... ведь у нас их 100 штук...
Вот и думаю как узнать какому аккаунту адресован ответ.
Схему прилагаю. Где:
Синие стрелки — содание потока.
Желтые стрелки — вызов сигнала emit