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

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

26.10.2021, 17:19. Показов 1189. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru