Описание класса QThreadPoolКласс QThreadPool управляет коллекцией объектов QThread. Далее... #include <QThreadPool> Унаследован от: QObject. Замечание: Все функции в этом классе потокобезопасны. Этот класс был введён в Qt 4.4. Свойства
Открытые функции
Статические открытые члены
Дополнительные унаследованные члены
Подробное описаниеКласс QThreadPool управляет коллекцией объектов QThread. QThreadPool управляет и повторно использует объекты QThread для помощи в уменьшении затрат на создание потоков в программах, использующих потоки. Каждое приложение Qt имеет один глобальный объект QThreadPool, к которому можно получить доступ через вызов globalInstance(). Для использования одного из потоков QThreadPool создайте подкласс QRunnable и переопределите виртуальную функцию run(). Затем создайте объект этого класса и выполните QThreadPool::start(). class HelloWorldTask : public QRunnable { void run() { qDebug() << "Hello world from thread" << QThread::currentThread(); } } HelloWorldTask *hello = new HelloWorldTask(); // QThreadPool takes ownership and deletes 'hello' automatically QThreadPool::globalInstance()->start(hello); По умолчанию QThreadPool удаляет QRunnable автоматически. Используйте QRunnable::setAutoDelete() для изменения флага автоудаления. QThreadPool поддерживает неоднократное выполнение того же QRunnable по вызову tryStart(this) из QRunnable::run(). Если autoDelete включен, то QRunnable будет удалён, когда последний поток выйдет из функции run. Неоднократный вызов start() с тем же самым QRunnable при включённом autoDelete создаёт состояние гонки и не рекомендуется. Неиспользуемые в течении определённого времени потоки истекают. По умолчанию это время составляет 30000 миллисекунд (30 секунд). Оно может быть изменено функцией setExpiryTimeout(). Установка отрицательного времени срока истечения отключает механизм истечения. Вызов maxThreadCount() запрашивает максимальное количество потоков, которые будут использоваться. При необходимости вы можете изменить ограничение с помощью setMaxThreadCount(). По умолчанию maxThreadCount() возвращает то же, что и QThread::idealThreadCount(). Функция activeThreadCount() возвращает количество работающих в данный момент потоков. Функция reserveThread() резервирует поток для внутреннего использования. Используйте releaseThread() после окончания работы с потоком, когда он сможет быть использован повторно. По существу, эти функции временно увеличивают или уменьшают количество активных потоков и полезны при выполнении длительных операций, не видимых QThreadPool. Обратите внимание, что QThreadPool - это низкоуровневый класс для управления потоками, посмотрите на QtConcurrent::run() или другие API Qt Concurrent для получения высокоуровневых API. Смотрите также QRunnable. Описание свойствactiveThreadCount : const intДанное свойство представляет собой количество активных потоков в пуле потоков. Замечание: Вполне возможно, что эта функция вернёт значение, большее чем maxThreadCount(). Для получения дополнительной информации смотрите reserveThread(). Функции доступа:
Смотрите также reserveThread() и releaseThread(). expiryTimeout : intПотоки, которые не используются expiryTimeout миллисекунд, считаются истёкшими и завершаются. Такие потоки будут перезапущены при необходимости. expiryTimeout по умолчанию равно 30000 миллисекунд (30 секунд). Если expiryTimeout отрицательное, то вновь созданные потоки не будут истекать, например, они не будут завершаться до уничтожения пула. Обратите внимание, что установка expiryTimeout не оказывает влияния на уже запущенные потоки. Только вновь созданные потоки будут использовать новый expiryTimeout. Мы рекомендуем устанавливать expiryTimeout сразу после создания пула потоков, но перед вызовом start(). Функции доступа:
maxThreadCount : intДанное свойство представляет собой максимальное количество потоков, используемых пулом потоков. Замечание: Пул потоков всегда будет использовать по крайней мере 1 поток, даже если предел maxThreadCount будет нулевым или отрицательным. По умолчанию maxThreadCount возвращает то же, что и QThread::idealThreadCount(). Функции доступа:
Описание функций-членовQThreadPool::QThreadPool ( QObject * parent = 0 )Создаёт пул потоков с указанным родителем parent. QThreadPool::~QThreadPool ()Уничтожает QThreadPool. Эта функция будет ожидать завершения всех запущенных объектов QRunnable. QThreadPool * QThreadPool::globalInstance () [static]Возвращает глобальный экземпляр QThreadPool. void QThreadPool::releaseThread ()Освобождает поток, ранее зарезервированный вызовом reserveThread(). Замечание: Вызов этой функции без предыдущего резервирования потока временно увеличит maxThreadCount(). Это полезно, когда поток засыпает, ожидая дальнейшей работы и позволяя выполняться другим потокам. Обязательно вызывайте reserveThread(), когда ожидание заканчивается, чтобы пул потоков мог содержать activeThreadCount() в корректном состоянии. Смотрите также reserveThread(). void QThreadPool::reserveThread ()Резервирует один поток, игнорируя activeThreadCount() и maxThreadCount(). Как только вы закончите работу с потоком, вызовите releaseThread(), чтобы позволить ему быть использованным повторно. Замечание: Эта функция всегда будет увеличивать количество активных потоков. Это означает, что при помощи этой функции можно сделать так, что activeThreadCount() вернет значение больше, чем maxThreadCount() . Смотрите также releaseThread(). void QThreadPool::start ( QRunnable * runnable, int priority = 0 )Резервирует поток и использует его для запуска runnable, если этот поток не сделает текущий счётчик потоков больше maxThreadCount(). В втором случае вместо запуска runnable добавляется в очередь на запуск. Аргумент priority может быть использован для управления порядком выполнения задач в очереди запущенных задач. Следует отметить, что пул потоков становится владельцем runnable, если runnable->autoDelete() возвращает true, и runnable будет удалён пулом потоков автоматически после возврата из runnable->run(). Если runnable->autoDelete() возвращает false, принадлежность runnable остаётся прежней. Обратите внимание, что изменение автоудаления у runnable после вызова этой функции приводит к неопределённому поведению. bool QThreadPool::tryStart ( QRunnable * runnable )Пытается зарезервировать поток для запуска runnable. Если во время вызова нет доступных потоков, то эта функция ничего не делает и возвращает false. В противном случае runnable сразу запускается, используя один из доступных потоков, и эта функция возвращает true. Следует отметить, что пул потоков становится владельцем runnable, если runnable->autoDelete() возвращает true, и runnable будет удалён пулом потоков автоматически после возврата из runnable->run(). Если runnable->autoDelete() возвращает false, принадлежность runnable остаётся прежней. Обратите внимание, что изменение автоудаления у runnable после вызова этой функции приводит к неопределённому поведению. void QThreadPool::waitForDone ()Ожидает завершения всех потоков и удаляет все потоки из пула потоков. bool QThreadPool::waitForDone ( int msecs )Эта функция перегружает функцию waitForDone(). Ожидает завершения всех потоков до msecs миллисекунд и удаляет все потоки из пула потоков. Возвращает true, если все потоки были удалены; в противном случае возвращает false. Эта функция была введена в Qt 4.8. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |