Вопрос о реализации QThread
-
20-09-2019 - |
Вопрос
Объект QThread представляет один поток выполнения.Но создается ли поток ОС при создании объекта QThread или когда start()
метод называется?
Меня интересует, могу ли я иметь несколько объектов QThread, и операционная система будет создавать потоки на start()
и убить их после run()
возвращается, и тогда я могу снова использовать объекты QThread.Но я не хочу удерживать ресурсы ОС, пока объекты QThread ничего не делают.
(кстати, я знаю о QtConcurrent и QThreadPool, и нет, они не удовлетворяют мои потребности в этой ситуации)
Решение
В Linux объект потока создается (через pthread_create
) в течение QThread::start
метод.С Windows это выглядит примерно так же.
Вы можете увидеть источник здесь:
Юникс: http://qt.gitorious.org/qt/qt/blobs/master/src/corelib/thread/qthread_unix.cpp (строка 542).
Окна: http://qt.gitorious.org/qt/qt/blobs/master/src/corelib/thread/qthread_win.cpp (строка 419).