2015-09-16 2 views
1

Можно ли назначить другой объект QFuture уже запущенному объекту QFuture? Как и в примере ниже:Назначение для запуска QFuture

QFuture<int> future = QtConcurrent::run(function); 
future = QtConcurrent::run(anotherFunciton); //assume that future is still running at this point 

Я понимаю, что этот пример не имеет особого смысла, это просто ради примера. Безопасно ли сделать такой прием, считая, что результат первой функции меня больше не интересует? Или мне нужно сначала отменить его? И если да, мне нужно ждать завершения аннулирования?

QFuture<int> future = QtConcurrent::run(function); 
future.cancel(); 
future.waitForFinished(); //is waiting necessary? 
future = QtConcurrent::run(anotherFunciton); 

ответ

1

От http://doc.qt.io/qt-4.8/qtconcurrentrun.html:

Обратите внимание, что QFuture возвращаемый QtConcurrent :: Run() не поддерживает отмену, приостановку или отчетности прогресса. Возвращенный QFuture может использоваться только для запроса состояния работы/завершения и возврата значения функции .

Это означает, что даже если вы этого захотите, вы не можете отменить свой QFuture. Кроме того, даже если отмена была разрешена, почему вы ее отменили, а затем дождались завершения ее?

http://doc.qt.io/qt-4.8/qthreadpool.html#expiryTimeout-prop От:

Темы, которые не используется в течение определенного промежутка времени истечет. Тайм-аут истечения составляет 30000 миллисекунд (30 секунд). Это может быть изменено с помощью setExpiryTimeout(). Установка отрицательного времени истечения срока действия отключает механизм истечения срока действия.

Поскольку темы QtConcurrent::run() управляются QThreadPool класса, то предполагается, что вы не указали отрицательный тайм-аут истечения срока, вы должны быть в состоянии future = QtConcurrent::run(anotherFunciton); без проблем; исходный поток истечет, и он выйдет. Однако эффективность этого дела вызывает сомнения.

+0

'waitForFinished()' метод также ждет отмены (http://doc.qt.io/qt-4.8/qfuture.html#waitForFinished), поэтому я вызывал этот метод. Однако, как вы уже упоминали, мой 'QFuture' не может быть отменен в любом случае. – Rames

Смежные вопросы