Russian Qt Forum

Компиляторы и платформы => Linux => Тема начата: pethead от Ноябрь 18, 2010, 06:33



Название: Много потоков не дает создать
Отправлено: pethead от Ноябрь 18, 2010, 06:33
в Windows код работает и дает от процесса 1200 потоков (если верить дисптечеру задач то 1204), в линуксе код сваливается с сообщением
QThread::start: Thread creation error: Ресурс временно недоступен.
если задать стек 1024 то сваливается в
...
557
GLib-ERROR **: Cannot create pipe main loop wake-up: Слишком много открытых файлов
Код:
#include <QtGui>

// ======================================================================
class MyThread : public QThread {
Q_OBJECT
private:
    int m_nValue;

public:
    MyThread() : m_nValue(1000)
    {
    }

    void run()
    {
while (true) {
msleep(m_nValue);
//qDebug() <<  QThread::currentThreadId();

}
    }
};

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    MyThread     *thread;

    for (int i=0;i<1201;++i){
thread=new MyThread();
   thread->start();
qDebug() << i;
}
 
    return app.exec();
}

#include "main.moc"



Название: Re: Много потоков не дает создать
Отправлено: Rcus от Ноябрь 18, 2010, 07:51
/*разворачивает стек вызовов по исходникам*/

QThread::start
QThreadPrivate::start
QThreadPrivate::createEventDispatcher
QEventDispatcherGlib::QEventDispatcherGlib
QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate
g_main_context_new
g_main_context_init_pipe
pipe2 - системный вызов. Создает два дескриптора, ограничивается максимальный количеством открытых дескрипторов (ulimit -n)


Название: Re: Много потоков не дает создать
Отправлено: pethead от Ноябрь 18, 2010, 08:41
эээ.... разъясните для колхозников.
ulimit -n не дает увеличить.


Название: Re: Много потоков не дает создать
Отправлено: crossly от Ноябрь 18, 2010, 16:41
а на кой болт столько нужно? ?