Класс QFuture
Класс QFuture представляет собой результат асинхронного вычисления. Подробнее...
| Заголовок: | #include <QFuture> |
| qmake: | QT += core |
| С момента: | Qt 4.4 |
Этот класс был представлен в Qt 4.4.
Примечание: Все функции в этом классе являются безопасными для потоков с следующими исключениями:
Типы общедоступных данных
| класс | const_iterator |
| typedef | ConstIterator |
Общедоступные функции
| QFuture(const QFuture<T> &other) | |
| QFuture() | |
| QFuture<T> & | operator=(const QFuture<T> &other) |
| ~QFuture() | |
| QFuture::const_iterator | begin() const |
| void | cancel() |
| QFuture::const_iterator | constBegin() const |
| QFuture::const_iterator | constEnd() const |
| QFuture::const_iterator | end() const |
| bool | isCanceled() const |
| bool | isFinished() const |
| bool | isPaused() const |
| bool | isResultReadyAt(int index) const |
| bool | isRunning() const |
| bool | isStarted() const |
| void | pause() |
| int | progressMaximum() const |
| int | progressMinimum() const |
| QString | progressText() const |
| int | progressValue() const |
| T | result() const |
| T | resultAt(int index) const |
| int | resultCount() const |
| QList<T> | results() const |
| void | resume() |
| void | setPaused(bool paused) |
| void | togglePaused() |
| void | waitForFinished() |
| T | operator T() const |
| bool | operator!=(const QFuture<T> &other) const |
| bool | operator==(const QFuture<T> &other) const |
Подробное описание
Для запуска вычислений используйте один из API-интерфейсов в рамках фреймворка Qt Concurrent.
QFuture позволяет потокам синхронизироваться с одним или несколькими результатами, которые будут готовы в более позднее время. Результат может быть любого типа, имеющего конструктор по умолчанию и конструктор копирования. Если результат недоступен в момент вызова функций result(), resultAt() или results(), QFuture будет ожидать, пока результат не станет доступным. Вы можете использовать функцию isResultReadyAt() для определения готовности результата. Для объектов QFuture, которые сообщают о более чем одном результате, функция resultCount() возвращает количество последовательных результатов. Это означает, что всегда безопасно перебирать результаты от 0 до resultCount().
QFuture предоставляет итератор в стиле Java (QFutureIterator) и итератор в стиле STL (QFuture::const_iterator). Использование этих итераторов — еще один способ доступа к результатам в будущем.
QFuture также предлагает способы взаимодействия с выполняемым вычислением. Например, вычисление можно отменить с помощью функции cancel(). Чтобы приостановить вычисление, используйте функцию setPaused() или одну из функций-удобств pause(), resume() или togglePaused(). Имейте в виду, что не все выполняемые асинхронные вычисления могут быть отменены или приостановлены. Например, будущее, возвращаемое функцией QtConcurrent::run(), не может быть отменено; но будущее, возвращаемое функцией QtConcurrent::mappedReduced(), может.
Информация о прогрессе предоставляется функциями progressValue(), progressMinimum(), progressMaximum() и progressText(). Функция waitForFinished() заставляет вызывающий поток заблокироваться и ждать завершения вычисления, гарантируя, что все результаты будут доступны.
Состояние вычисления, представленного объектом QFuture, можно запросить с помощью функций isCanceled(), isStarted(), isFinished(), isRunning() или isPaused().
QFuture — это легкий класс со счетом ссылок, который может передаваться по значению.
QFuture<void> специализирован для того, чтобы не содержать функций извлечения результатов. Любой QFuture<T> может быть присвоен или скопирован в QFuture<void> также. Это полезно, если нужна только информация о состоянии или прогрессе, а не фактические данные результата.
Для взаимодействия с запущенными задачами с помощью сигналов и слотов используйте QFutureWatcher.
См. также QFutureWatcher и Qt Concurrent.
Документация по типам членов
typedef QFuture::ConstIterator
Синоним в стиле Qt для QFuture::const_iterator.
Документация по функциям членов
QFuture::QFuture(const QFuture<T> &other)
Создает копию other.
См. также operator=().
QFuture::QFuture()
Создает пустое, отмененное будущее.
QFuture<T> &QFuture::operator=(const QFuture<T> &other)
Присваивает other этому будущему и возвращает ссылку на это будущее.
QFuture::~QFuture()
Уничтожает будущее.
Обратите внимание, что это ни ждёт, ни отменяет асинхронное вычисление. Используйте waitForFinished() или QFutureSynchronizer, когда вам нужно убедиться, что вычисление завершилось до того, как будущее будет уничтожено.
QFuture::const_iterator QFuture::begin() const
Возвращает константный итератор STL-стиля, указывающий на первый результат в будущем.
См. также constBegin() и end().
void QFuture::cancel()
Отменяет асинхронное вычисление, представленное этим будущим. Обратите внимание, что отмена выполняется асинхронно. Используйте waitForFinished() после вызова cancel(), если вам нужна синхронная отмена.
Доступ к текущим доступным результатам на отменённом будущем всё ещё возможен, но новые результаты не будут доступны после вызова этой функции. Любой объект QFutureWatcher, наблюдающий за этим будущим, не будет передавать сигналы готовности прогресса и результата на отменённом будущем.
Помните, что не все выполняемые асинхронные вычисления могут быть отменены. Например, будущее, возвращаемое функцией QtConcurrent::run(), не может быть отменено; но будущее, возвращаемое функцией QtConcurrent::mappedReduced(), может.
QFuture::const_iterator QFuture::constBegin() const
Возвращает константный итератор STL-стиля, указывающий на первый результат в будущем.
См. также begin() и constEnd().
QFuture::const_iterator QFuture::constEnd() const
Возвращает константный итератор STL-стиля, указывающий на воображаемый результат после последнего результата в будущем.
См. также constBegin() и end().
QFuture::const_iterator QFuture::end() const
Возвращает константный итератор STL-стиля, указывающий на воображаемый результат после последнего результата в будущем.
См. также begin() и constEnd().
bool QFuture::isCanceled() const
Возвращает true если асинхронное вычисление было отменено с помощью функции cancel(); в противном случае возвращает false.
Обратите внимание, что вычисление может по-прежнему выполняться, даже если эта функция возвращает true. См. cancel() для получения дополнительной информации.
bool QFuture::isFinished() const
Возвращает true если асинхронное вычисление, представленное этим будущим, завершилось; в противном случае возвращает false.
bool QFuture::isPaused() const
Возвращает true если асинхронное вычисление было приостановлено с помощью функции pause(); в противном случае возвращает false.
Обратите внимание, что вычисление может по-прежнему выполняться, даже если эта функция возвращает true. См. setPaused() для получения дополнительной информации.
См. также setPaused() и togglePaused().
bool QFuture::isResultReadyAt(int index) const
Возвращает true если результат по индексу index немедленно доступен; в противном случае возвращает false.
См. также resultAt() и resultCount().
bool QFuture::isRunning() const
Возвращает true если асинхронное вычисление, представленное этим будущим, в настоящее время выполняется; в противном случае возвращает false.
bool QFuture::isStarted() const
Возвращает true если асинхронное вычисление, представленное этим будущим, было запущено; в противном случае возвращает false.
void QFuture::pause()
Приостанавливает асинхронное вычисление, представленное этим будущим. Это удобный метод, который просто вызывает setPaused(true).
См. также resume().
int QFuture::progressMaximum() const
Возвращает максимальное значение progressValue().
См. также progressValue() и progressMinimum().
int QFuture::progressMinimum() const
Возвращает минимальное значение progressValue().
См. также progressValue() и progressMaximum().
QString QFuture::progressText() const
Возвращает (необязательное) текстовое представление прогресса, как сообщается асинхронным вычислением.
Обратите внимание, что не все вычисления предоставляют текстовое представление прогресса, и поэтому эта функция может вернуть пустую строку.
int QFuture::progressValue() const
Возвращает текущее значение прогресса, которое находится между progressMinimum() и progressMaximum().
См. также progressMinimum() и progressMaximum().
T QFuture::result() const
Возвращает первый результат в будущем. Если результат немедленно недоступен, эта функция будет блокироваться и ожидать, пока результат не станет доступным. Это удобный метод для вызова resultAt(0).
См. также resultAt() и results().
T QFuture::resultAt(int index) const
Возвращает результат по индексу index в будущем. Если результат немедленно недоступен, эта функция будет блокироваться и ожидать, пока результат не станет доступным.
См. также result(), results() и resultCount().
int QFuture::resultCount() const
Возвращает количество непрерывных результатов, доступных в этом будущем. Реальное количество сохранённых результатов может отличаться от этого значения из-за пробелов в наборе результатов. Всегда безопасно перебирать результаты от 0 до resultCount().
См. также result(), resultAt() и results().
QList<T> QFuture::results() const
Возвращает все результаты из будущего. Если результаты немедленно недоступны, эта функция будет блокироваться и ожидать, пока они не станут доступными.
См. также result(), resultAt() и resultCount().
void QFuture::resume()
Возобновляет асинхронное вычисление, представленное этим будущим. Это удобный метод, который просто вызывает setPaused(false).
См. также pause().
void QFuture::setPaused(bool paused)
Если paused равно true, эта функция приостанавливает асинхронное вычисление, представленное будущим. Если вычисление уже приостановлено, эта функция ничего не делает. Любой объект QFutureWatcher, который наблюдает за этим будущим, прекратит передачу сигналов прогресса и готовности результата, пока будущее приостановлено. Передача сигнала продолжится после возобновления будущего.
Если paused равно false, эта функция возобновляет асинхронное вычисление. Если вычисление ранее не было приостановлено, эта функция ничего не делает.
Обратите внимание, что не все вычисления могут быть приостановлены. Например, будущее, возвращаемое функцией QtConcurrent::run(), не может быть приостановлено; но будущее, возвращаемое функцией QtConcurrent::mappedReduced(), может.
См. также isPaused(), pause(), resume() и togglePaused().
void QFuture::togglePaused()
Переключает состояние приостановки асинхронного вычисления. Другими словами, если вычисление в настоящее время приостановлено, вызов этой функции возобновляет его; если вычисление выполняется, оно приостанавливается. Это удобный метод для вызова setPaused(!isPaused()).
См. также setPaused(), pause() и resume().
void QFuture::waitForFinished()
Ожидает завершения асинхронного вычисления (включая отменённые cancel() вычисления).
T QFuture::operator T() const
Возвращает первый результат в будущем. Если результат немедленно недоступен, эта функция будет блокироваться и ожидать, пока результат не станет доступным. Это удобный метод для вызова result() или resultAt(0).
См. также result(), resultAt() и results().
bool QFuture::operator!=(const QFuture<T> &other) const
Возвращает true если other не является копией этого будущего; в противном случае возвращает false.
bool QFuture::operator==(const QFuture<T> &other) const
Возвращает true если other является копией этого будущего; в противном случае возвращает false.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qfuture.html