У меня проблема в многопоточной программе. Моя программа имеет 4 потока, которые всегда здесь. Мы назовем эти потоки от 1 до 4.
Целью моей программы является связь через сокет с периферийным устройством. Поток номер 4 используется для отправки сообщений на периферийное устройство.
Каждый раз, когда сообщение отправляется на периферийное устройство, я использую:
pthread_create(&m_hThreadMsgReader, NULL, &ThreadMsgReader, (void*) &argStruct);
Это создаст поток для прослушивания ответа в сокете, этот поток вернется, когда сокет больше не содержит сообщения: т. е. ifiRet = recv(m_iSocket, pcRecBuf, DEFAULT_READ_DATA_LEN, 0);
заставляет iRet принимать значение 0.
Таким образом, с текущей реализацией пул данных создается (каждую минуту) на периферийном устройстве (помимо другой команды, отправляемой через пользовательский ввод).
Проблема здесь в том, что через несколько часов pthread create вылетает с ошибкой 11. Я видел, что при переполнении стека это означает, что в системе может не хватить ресурсов или слишком много потоков.
Но я не понимаю, как в отладке QtCreator, я вижу только потоки с 1 по 4. Я знаю, что мог создать около 300 потоков, но список потоков содержит только 4, что означает, что все остальные потоки были завершены.
Поэтому я действительно не понимаю, является ли максимальное количество создаваемых потоков в течение всего жизненного цикла процесса или количество потоков, присутствующих одновременно.
Должен ли я просто найти способ иметь один поток для прослушивания, даже если он будет прослушивать пустой сокет? Является ли моя реализация плохим шаблоном?