Имам проблем с многонишкова програма. Моята програма има 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, което означава, че всички други нишки са прекратени.
Така че наистина не разбирам дали максималният брой създаване на нишки е през целия живот на процеса или броя на нишките, присъстващи едновременно.
Трябва ли просто да намеря начин да имам една нишка за слушане, дори ако тя ще слуша на празен сокет? Моята реализация лош модел ли е?