С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 04.08.2021
Сообщений: 193

Возможное количество потоков

26.10.2021, 17:19. Показов 1168. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

Делаю приложение, где необходимо отправлять и принимать данные в разных потоках. Количество потоков превышает идеальное количество потоков, количество которых возвращает функция QThread::idealThreadCount().

Есть ли возможность как то увеличить возможное количество создаваемых потоков?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2021, 17:19
Ответы с готовыми решениями:

Найти максимальное возможное количество боксёров в команде
Помогите, пожалуйста, разобраться с решением задачи Есть n боксёров, вес i-го равен ai. Каждый из них перед соревнованием может изменить...

Определить минимально возможное количество игроков в команде КВН
Определить минимально возможное количество игроков в команде КВН, если известно, что девушек в команде больше X%, но меньше Y%. ...

Наследство. Найти минимальное и максимальное возможное общее количество медальонов
Владелица большой недвижимости стала настолько стара, что уже не встает с постели. По этой причине ее любящие N дочери начали обсуждать...

7
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
26.10.2021, 20:00
Как связано
Цитата Сообщение от Horwood Посмотреть сообщение
количество которых возвращает функция QThread::idealThreadCount()
, возвращаемое значение которой связано с количеством ядер в вашем процессоре и
Цитата Сообщение от Horwood Посмотреть сообщение
возможность как то увеличить возможное количество создаваемых потоков
?
Потоки создаются? Да. Тогда в чем проблема? А увеличить количество одновременно выполняющихся потоков можно только заменой процессора.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.10.2021, 20:27
Цитата Сообщение от Horwood Посмотреть сообщение
QThread::idealThreadCount()
ты когда нибудь думал о том, почему "идеальное количество потоков" называют "идеальным" ?
это - оптимальное кол-во активных потоков, которые могут эффективно параллельно исполняться.

Цитата Сообщение от Horwood Посмотреть сообщение
Есть ли возможность как то увеличить возможное количество создаваемых потоков?
да. но тебе этого не нужно.
потому что, если кол-во активных потоков превысит идеальное,
это приведет к ухудшению эффективности.

Цитата Сообщение от Horwood Посмотреть сообщение
приложение, где необходимо отправлять и принимать данные в разных потоках
QThreadPool
0
1 / 1 / 0
Регистрация: 04.08.2021
Сообщений: 193
27.10.2021, 10:40  [ТС]
Проблема в том, что идеальное количество у меня - 4. Когда я создаю пятый - он работает, но когда мне конкретно его необходимо остановить - останавливается основной поток. С остальными четырьмя потоками такой проблемы нет.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.10.2021, 13:29
Цитата Сообщение от Horwood Посмотреть сообщение
Проблема в том, что
твоя проблема в том, что ты перепутал форум программистов с форумом телепатов.
0
1 / 1 / 0
Регистрация: 04.08.2021
Сообщений: 193
27.10.2021, 14:01  [ТС]
Что в моем вопросе было не понятного?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
27.10.2021, 14:10
Цитата Сообщение от Horwood Посмотреть сообщение
Что в моем вопросе было не понятного?
Может для начала можно было бы выложить код, именно тот, где происходит вот такое явление.
Цитата Сообщение от Horwood Посмотреть сообщение
Когда я создаю пятый - он работает, но когда мне конкретно его необходимо остановить - останавливается основной поток. С остальными четырьмя потоками такой проблемы нет.
0
1 / 1 / 0
Регистрация: 04.08.2021
Сообщений: 193
27.10.2021, 14:36  [ТС]
Вот код. До создания пятого потока все работало отлично.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// инициализируем конструкторы потоков
    ThreadSendUDP threadHardware(&socketArray[SOCKET_UDP_HARDWARE], &socketArray[SOCKET_UDP_USER], &ipaddrLocal, &ipaddrClient, &checking.mask, "Broadcast from Hardware:    PORT ",&messThreadHard);
    ThreadSendUDP threadDigger(&socketArray[SOCKET_UDP_DIGGER], &socketArray[SOCKET_UDP_USER], &ipaddrLocal, &ipaddrClient, &checking.mask, "Broadcast from DIGGER:    PORT ", &messThreadDigg);
    ThreadSendRaw threadRAW(&rawSocket, &socketArray[SOCKET_UDP_USER], &fladSendRaw, &checking.broadcastAddr,&messThreadRAW);
    ThreadCheckConnect threadCon(&socketArray[SOCKET_UDP_CHECK], &ipaddrLocal, &ipaddrClient);
    ThreadArp threadARP(&checking.mask, &ipaddrLocal, &ipaddrClient, &otherMask, checking.macAddrRouter, checking.macAddrLocal, &differentARP);
 
while (true)
    {
        bool threadIsStart = false;     // запущены потоки или нет
        bool cycleSend = true;      // работа основного цикла обработки
 
        while (cycleSend)
        {
                        // запуск потоков
            if (!threadIsStart)
                threadIsStart = controlThread(&threadHardware, &threadDigger, &threadRAW,&threadCon,&threadARP, START_THREAD);
 
            printMessage(&messThreadHard, &messThreadDigg, &messThreadRAW, &messThreadARP);
 
            if (!threadHardware.socketWorked || !threadDigger.socketWorked || !threadRAW.socketWorked || !threadCon.socketWorked)
                recreatedSocket(socketArray, &rawSocket);
 
            if (threadCon.countBadConnect > 10) 
                cycleSend = controlThread(&threadHardware, &threadDigger, &threadRAW, &threadCon, &threadARP, STOP_THREAD);         
        }
    }
 
bool controlThread(ThreadSendUDP *threadHardware, ThreadSendUDP *threadDigger, ThreadSendRaw *threadRAW, ThreadCheckConnect *threadCon, ThreadArp *threadARP, const unsigned int control)
{
    switch (control)
    {
    case START_THREAD:
        {
            threadCon->countBadConnect = 0;
            threadHardware->start();
            threadDigger->start();
            threadRAW->start();
            threadCon->start();
            threadARP->start();
            return true;
        }
    case STOP_THREAD: // в этом блоке возникает ошибка при попытке остановить поток
        {
            threadHardware->stop();
            threadDigger->stop();
            threadRAW->stop();
            threadCon->stop();
            threadARP->stop();
            threadCon->countBadConnect = 0;
            return false;
        }
    case TERMINATE_THREAD:
        {
            threadHardware->terminate();
            threadDigger->terminate();
            threadRAW->terminate();
            threadCon->terminate();
            threadARP->terminate();
            threadCon->countBadConnect = 0;
            return false;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2021, 14:36
Помогаю со студенческими работами здесь

Определить какое максимально возможное количество членов комиссии может остаться без работы
Доброго времени суток. У меня такой вопрос где ошибка в данном коде? #include <iostream> using namespace std; int main() { ...

Определить минимально возможное количество мостов, которые необходимо задействовать при строительстве метрополитена
Помогите, пожалуйста #include <iostream> using namespace std; int main() { int N,K,M,c,x,y,t; int *v; ...

Требуется вычеркнуть минимально возможное количество чисел так, чтобы оставшиеся числа шли в порядке возрастания
27. Дана последовательность из N целых чисел, среди которых нет двух одинаковых. Требуется вычеркнуть минимально возможное количество чисел...

Увеличить возможное количество потоков (thread'ов)
Привет! Не могу решить проблему - создаю в программе большое кол-во потоков, при создании 345-го потока pthread_create() возвращает...

Определить количество потоков в процессе, базовый приоритет, исследовать изменения приоритета потоков
Напишите программу на C#, запускающую новый процесс (любое приложение). Определите количество потоков в запущенном процессе, базовый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru