Название: QThread, проблема с количеством потоков. Отправлено: PaulKaz от Март 29, 2012, 14:22 Есть программа, в которой раз в 5-10 секунд создаётся 3-4 потока, выполняется необходимое задание и потоки завершаются. Через какое-то время использования обнаружилось что создаётся не больше 900...1100 потоков (при создании последующего вылетает ошибка QThread::start: Failed to create thread (??? ??????? ???????.)).
При этом проблема только появляется в WindowsXP Qt4.8.0 В приложении программа которая раз в 10мс создаёт поток. Дойдя где-то 1000 начитают сыпаться ошибки. Название: Re: QThread, проблема с количеством потоков. Отправлено: Пантер от Март 29, 2012, 14:26 Сам с таким столкнулся недавно. Не создавай столько потоков.
Название: Re: QThread, проблема с количеством потоков. Отправлено: Bepec от Март 29, 2012, 14:27 Вы хохо не хуху?
На**га вам одновременно 10к потоков??? Или вы решили взламывать пентагон подбором пароля? Конечно. Windows следит за количеством потоком и не отдаст вам больше положенного. Это же не linux, где, насколько я помню, можно до 100к потоков запустить с наивысшим приоритетом. PS удалять потоки не забывайте... Так, ради разнообразия. update: 1000 потоков, убитых терминейтедом... Это ужасно... Название: Re: QThread, проблема с количеством потоков. Отправлено: V1KT0P от Март 29, 2012, 14:28 Есть программа, в которой раз в 5-10 секунд создаётся 3-4 потока, выполняется необходимое задание и потоки завершаются. Через какое-то время использования обнаружилось что создаётся не больше 900...1100 потоков (при создании последующего вылетает ошибка QThread::start: Failed to create thread (??? ??????? ???????.)). Может памяти не хватает, ведь на один поток 1 метр по умолчанию выделяется. 1000 потоков уже 1 гигабайт, не считая переменных которые используют потоки.При этом проблема только появляется в WindowsXP Qt4.8.0 В приложении программа которая раз в 10мс создаёт поток. Дойдя где-то 1000 начитают сыпаться ошибки. Название: Re: QThread, проблема с количеством потоков. Отправлено: Bepec от Март 29, 2012, 14:31 Не, есть цикл статей по Qt на
Там приводятся факты об управлении потоками в Windows и Linux. И насколько я помню, Windows имеет ограничение, а Linux позволяет творить что угодно. Название: Re: QThread, проблема с количеством потоков. Отправлено: m_ax от Март 29, 2012, 14:33 А это нормально вызывать terminate() в run() ?
Код И потом объекты MyThread никто не удаляет.. Название: Re: QThread, проблема с количеством потоков. Отправлено: V1KT0P от Март 29, 2012, 14:39 В приложении программа которая раз в 10мс создаёт поток. Дойдя где-то 1000 начитают сыпаться ошибки. Вот фикс(но учти если задачи будут выполняться слишком долго, а потоки будут появляться слишком быстро, то программа упадет. Лучше всего контролировать количество потоков):Код
Название: Re: QThread, проблема с количеством потоков. Отправлено: Bepec от Март 29, 2012, 14:42 У меня максимум количества потоков в программе было - 4. И то для беспрерывного запроса данных с частотой раз в секунду. И вроде хватало.
НАФИГА 10000 потоков?????? Название: Re: QThread, проблема с количеством потоков. Отправлено: Igors от Март 29, 2012, 14:57 НАФИГА 10000 потоков?????? Видимо из эстетических соображений "больше = лучше"Код
Название: Re: QThread, проблема с количеством потоков. Отправлено: PaulKaz от Март 29, 2012, 15:48 На**га вам одновременно 10к потоков??? Или вы решили взламывать пентагон подбором пароля? Конечно. Windows следит за количеством потоком и не отдаст вам больше положенного. Собственно 1000 потоков одновременно и не работают. Одновременно 1-2, максимум до 4. Проблема собственно и была в том, что завершал их teminate'ом. Исправил, всё нормально заработало. Спасибо за помощь. |