#include "WorkManager.h" #include #include #include #include #include class WorkManagerImpl: public WorkManager { public: virtual void addRunnable(QRunnable *runnable) override; virtual void addWork(Work work) override; }; std::shared_ptr WorkManager::getWorkManager() { static std::shared_ptr wm = std::make_shared(); return wm; } void WorkManagerImpl::addRunnable(QRunnable *runnable) { auto tp = QThreadPool::globalInstance(); tp->start(runnable); } class CallableTask : public QRunnable { public: CallableTask(WorkManager::Work &&w) : work(std::move(w)) {} protected: void run() { work(); } private: WorkManager::Work work; }; void WorkManagerImpl::addWork(Work work) { addRunnable(new CallableTask(std::move(work))); }