Russian Qt Forum

Qt => Работа с сетью => Тема начата: Zusykss от Май 03, 2018, 20:47



Название: Проблема qthread::start:failed to create thread
Отправлено: 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();


Название: Re: Проблема qthread::start:failed to create thread
Отправлено: qate от Май 03, 2018, 21:34
краш это хорошо - бери корку и смотри где упал


Название: Re: Проблема qthread::start:failed to create thread
Отправлено: Zusykss от Май 04, 2018, 07:35
У меня в проекте около 20 методов где создается
std::unique_ptr <QNetworkAccessManager> manager;
    manager.reset(new QNetworkAccessManager);

Из-за этого и происходит краш


Название: Re: Проблема qthread::start:failed to create thread
Отправлено: qate от Май 04, 2018, 09:29
делай минимально рабочий падающий пример
иначе только гадать что там в методах делается - падение ли от создания QNetworkAccessManager или его обработки


Название: Re: Проблема qthread::start:failed to create thread
Отправлено: Авварон от Май 04, 2018, 15:41
афаик, QNAM внутри создает треды (несолько), 200 тредов*количество тредов в QNAM == краш


Название: Re: Проблема qthread::start:failed to create thread
Отправлено: Zusykss от Май 04, 2018, 21:47
Так, если я в программе могу создать при запуске программы около 50 потоков и каждый поток создаст еще по менеджеру, а можно еще создать в дополнительном режиме +3 потока на каждую запущенную задачу...
Так этот краш будет постоянно вылетать

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

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


Название: Re: Проблема qthread::start:failed to create thread
Отправлено: kai666_73 от Май 04, 2018, 22:03
...
Или что вы можете посоветовать ?

По мне, так, задача будто предназначена для реализации на Go )


Название: Re: Проблема qthread::start:failed to create thread
Отправлено: zhbr от Май 05, 2018, 07:22
А зачем так много потоков? имхо одновременная работа >20 потоков расточительно.
может проще переделать программу под QThreadPool+QtConcurrent::run или QThreadPool+QRunnable


Название: Re: Проблема qthread::start:failed to create thread
Отправлено: Igors от Май 05, 2018, 07:51
Конечно это "не по делу", но..
Проблема следующая, в проекте использую множество потоков может быть одновременно до 200 штук, ..
Лично мне читать дальше уже не хочется, вникать в приведенный фрагмент кода - тем более. Если сорят нитками - такая архитектурой хорошей быть не может. И надо ее менять "в прынцыпе" (а не латать)


Название: Re: Проблема qthread::start:failed to create thread
Отправлено: Zusykss от Май 06, 2018, 06:00
Проблема решена, использую 1 менеджер на весь проект, связал его с другими потоками сигналами и слотами. ;D

Все спасибо кто откликнулся