Russian Qt Forum
Март 28, 2024, 16:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема qthread::start:failed to create thread  (Прочитано 6515 раз)
Zusykss
Гость
« : Май 03, 2018, 20:47 »

Добрый вечер всем
Проблема следующая, в проекте использую множество потоков может быть одновременно до 200 штук, в каждом потоке в разных методах создаются QNetworkAccessManager, и через какое-то время (оно разное в зависимости от количества запущенных задач) программа зависает и вываливается краш программы.

Пробовал создать один менеджер на весь проект но так нельзя...
Может кто-то делал похожую задачу.

пример кода:

Код:

    std::unique_ptr <QNetworkAccessManager> manager;
    manager.reset(new QNetworkAccessManager);
    QString nonce, encrypt;
    encrypt = generate_encrypt(nonce, m_API_SECRET);
    QString end = QString("/api/v3/account?timestamp=%1&signature=%2").arg(nonce).arg(encrypt);
    QString url = m_BASE_URL + end;

    QNetworkRequest request;
    request.setUrl(QUrl(url));

    QNetworkReply * reply = manager->get(request);

    QEventLoop loop;
    QObject::connect(reply, QNetworkReply::readyRead, &loop, QEventLoop::quit);
    loop.exec();

    QString responce = reply->readAll();
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Май 03, 2018, 21:34 »

краш это хорошо - бери корку и смотри где упал
Записан
Zusykss
Гость
« Ответ #2 : Май 04, 2018, 07:35 »

У меня в проекте около 20 методов где создается
std::unique_ptr <QNetworkAccessManager> manager;
    manager.reset(new QNetworkAccessManager);

Из-за этого и происходит краш
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #3 : Май 04, 2018, 09:29 »

делай минимально рабочий падающий пример
иначе только гадать что там в методах делается - падение ли от создания QNetworkAccessManager или его обработки
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #4 : Май 04, 2018, 15:41 »

афаик, QNAM внутри создает треды (несолько), 200 тредов*количество тредов в QNAM == краш
Записан
Zusykss
Гость
« Ответ #5 : Май 04, 2018, 21:47 »

Так, если я в программе могу создать при запуске программы около 50 потоков и каждый поток создаст еще по менеджеру, а можно еще создать в дополнительном режиме +3 потока на каждую запущенную задачу...
Так этот краш будет постоянно вылетать

Вы не знаете, есть возможно увеличить колличество потоков на приложение ??
Например вместо 200 установить 1000 ??

Или что вы можете посоветовать ?
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #6 : Май 04, 2018, 22:03 »

...
Или что вы можете посоветовать ?

По мне, так, задача будто предназначена для реализации на Go )
Записан
zhbr
Гость
« Ответ #7 : Май 05, 2018, 07:22 »

А зачем так много потоков? имхо одновременная работа >20 потоков расточительно.
может проще переделать программу под QThreadPool+QtConcurrent::run или QThreadPool+QRunnable
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Май 05, 2018, 07:51 »

Конечно это "не по делу", но..
Проблема следующая, в проекте использую множество потоков может быть одновременно до 200 штук, ..
Лично мне читать дальше уже не хочется, вникать в приведенный фрагмент кода - тем более. Если сорят нитками - такая архитектурой хорошей быть не может. И надо ее менять "в прынцыпе" (а не латать)
Записан
Zusykss
Гость
« Ответ #9 : Май 06, 2018, 06:00 »

Проблема решена, использую 1 менеджер на весь проект, связал его с другими потоками сигналами и слотами. Смеющийся

Все спасибо кто откликнулся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 22.