Код: Выделить всё
class TaskRunner
{
public:
TaskRunner() :
mPool(new QThreadPool())
{
mPool->setMaxThreadCount(1);
mPool->setExpiryTimeout(-1);
}
public:
// For Funcs returning an instance of std::variant
template
std::enable_if_t
async(Func func, OnComplete onComplete, OnError onError, Args... args)
{
QMutexLocker lock(&mutex);
(void)QtConcurrent::run(mPool.get(), [=]() {
const auto result = func(args...);
if (result.index() == 0)
onComplete(std::get(result));
else
onError(std::get(result));
});
}
// ... similar templates for std::optional, etc. ...
private:
QScopedPointer mPool;
QMutex mutex;
};
Код: Выделить всё
TaskRunner runner;
runner.async([](int a, int b) {
if(b != 0)
return a/b;
else
return std::string("division by zero");},
[](auto result){ std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78248509/qt-running-callback-in-the-main-thread-from-the-worker-thread[/url]