#ifndef TASKEXECUTOR_H #define TASKEXECUTOR_H /* From answer by Hatter * * https://stackoverflow.com/questions/5423058/qfuture-that-can-be-cancelled-and-report-progress */ #include "ControllableTask.h" #include "RunControllableTask.h" #include /** * @brief The TaskExecutor class * * The user should sublass ControllableTask, implement background routine which checks sometimes * method shouldRun() of TaskControl instance passed to run(TaskControl&) and then use it like: * * QFututre futureValue = TaskExecutor::run(new SomeControllableTask(inputForThatTask)); * * Then she may cancel it by calling futureValue.cancel(), bearing in mind that cancellation is * graceful and not immediate. * */ class TaskExecutor { public: template static QFuture run(ControllableTask* task) { return (new RunControllableTask(task))->start(); } }; #endif // TASKEXECUTOR_H