QFutureWatcher и ожидание main потока QT

288
11 ноября 2017, 13:20

Приветствую! Волнует одна большая для меня проблема которую никак не получается решить. Речь идет о многопоточности а именно пытаюсь реализовать отдельный поток при условии что главный поток будет ждать его выполнение главное не блокируя сам UI. Пробовал много разных вариантов std а так же несколько вариантов из QT. На последнем на чем остановился, следующий код

template <class FUNCTION, class... Args>
auto runAsync(FUNCTION&& func, Args&&... args) -> decltype(QtConcurrent::run(std::forward<FUNCTION>(func), std::forward<Args>(args)...))
{
    QEventLoop eventLoop;
    auto future = QtConcurrent::run(std::forward<FUNCTION>(func), std::forward<Args>(args)...);
    auto futureWatcher = new QFutureWatcher<void>();
    QObject::connect(futureWatcher, &QFutureWatcher<void>::finished, [=]()
    {
        futureWatcher->deleteLater();
    });
    futureWatcher->setFuture(future);
    eventLoop.exec();
    futureWatcher->deleteLater();
    return future;
}

..

auto thr = runAsync([=]()
{
    QThread::currentThread()->sleep(5);
    //Sleep(5000);
    return "200";
});

Проблема заключается в том что главный поток якобы зависает при выполнении функции runAsync(..). Возможно кто понимает о чем я говорю и сможет мне помочь. С Уважением

READ ALSO
DataTables редактирование одной ячейки

DataTables редактирование одной ячейки

Знаю только Азы javascript и JQuery, Искал ответа на всех 64 темах в stackoverflow

283