Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: Zusykss от Январь 06, 2018, 02:22



Название: QtConcurrent Создание множества потоков
Отправлено: Zusykss от Январь 06, 2018, 02:22
Добрый вечер друзья.
Я создаю таким способом 10 потоков
Код:
 for(int i = 0; i < m_donors.size(); i++)
    {
        ObjThread * thread = new ObjThread(); // обертка для QFuture<void> QFutureWatcher<void>
        m_listThreads.push_back(thread);
        m_listThreads[i]->getValues(QtConcurrent::run(this, &Presenter::processStartOne,m_donors[i], thread->working));
    }


Из 10 потоков которые созданы, запускается только 4 остальные ничего не делают
В потоках работаю с сетью, через QNetworkAccessManager
Примерно такой код

Код:
    while(do_work)
    {
        if (!donor.m_enable) {
            QThread::sleep(1);
            continue;
        }

        if (!donor.m_enable) continue;

        donor_1->getValues(donor.m_pair); // запрос №1
        donor_2->getValues(donor.m_pair); // запрос №2


Подскажите что-то толковое как решить такую проблему? ??? ???


Название: Re: QtConcurrent Создание множества потоков
Отправлено: qate от Январь 06, 2018, 20:57
QThreadPool::globalInstance()->maxThreadCount() == 4 ?


Название: Re: QtConcurrent Создание множества потоков
Отправлено: Zusykss от Январь 07, 2018, 16:30
QThreadPool::globalInstance()->maxThreadCount() == 4 ?

Да


Название: Re: QtConcurrent Создание множества потоков
Отправлено: Zusykss от Январь 07, 2018, 19:02
Если у кого-то есть решение, или идеи как можно одновременно запустить больше потоков чем максимальное количество и вообще реально ли это.

Сообщите будет интересно узнать ;)


Название: Re: QtConcurrent Создание множества потоков
Отправлено: kibsoft от Январь 07, 2018, 19:17
А вы уверены, что вам вообще нужно такое количество потоков? Для чего это делается? QNetworkAccessManager сам по себе асинхронный и может исполнять несколько запросов сразу.


Название: Re: QtConcurrent Создание множества потоков
Отправлено: qate от Январь 07, 2018, 19:45
QThreadPool::globalInstance()->maxThreadCount() == 4 ?

Да

и еще не догадался ?