Здравствуйте.
Делаю многопоточный сервер. За основу взял Threaded Fortune Server Example. Добавил ограничение на количество потоков.
qServerThread *thread = new qServerThread(socketDescriptor, commonData, this);
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); //NOTE: no need to delete the object
thread->start();
//Если достигли максимального количества потоков ждём пока кто то освободится
while(thread->threadCount() >= maxThreads)
{
QTest::qSleep(10);
}
При невысокой нагрузке на сервер всё работает замечательно. Если же нагрузка постоянно в предельном состоянии. Удаление объектов qServerThread не происходит до тех пор пока нагрузка не снизится. То есть поток отрабатывает, а слот deleteLater не вызывается. В результате имею постоянное количество запущенных потоков (maxThreads) и непрерывно растущее количество объектов qServerThread в памяти.
Предпологаю, что ждать освобождения потоков таким образом:
не правильно. Здесь логично было бы передать управление механизму обработки сигналов Qt. Но как это сделать не понятно.
Может кто нибудь подскажет решение.