Есть ли способ обнаружить, когда QT QRunnable объект сделан? - PullRequest
6 голосов
/ 14 октября 2010

Есть ли способ обнаружить, когда QT QRunnable объект сделан? (За исключением ручного создания некоторого сигнального события в конце метода run ().)

Ответы [ 3 ]

5 голосов
/ 11 сентября 2013

Вы можете просто использовать QtConcurrent для запуска работоспособного и использовать QFuture для ожидания завершения.

#include <QtConcurrentRun>

class MyRunnable : public Runnable{
  void run();
}

чтобы запустить и дождаться его, вы можете сделать следующее

//create a new MyRunnable to use
MyRunnable instance;

//run the instance asynchronously
QFuture<void> future = QtConcurrent::run(&instance, &MyRunnable::run);

//wait for the instance completion
future.waitForFinished();

Qtconcurrent :: run запустит новый поток для выполнения метода run () в экземпляре и немедленно вернет QFuture, который отслеживает прогресс экземпляра.

Обратите внимание, что, используя это решение, вы обязаны сохранять экземпляр в памяти во время выполнения.

4 голосов
/ 10 июня 2013

Вы можете добавить свой собственный SIGNAL, который испускается как последнее, что делает ваш run() метод.Затем просто подключите его к coreesponding SLOT прямо перед вызовом connect(...);

4 голосов
/ 14 октября 2010

Может быть, или вам, возможно, придется пойти немного выше уровня. Классы QFuture и QFutureWatcher предназначены для работы с Qt's Concurrent Framework , а класс QFutureWatcher имеет сигнал когда предмет, который он наблюдает, закончен.

...