首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QFutures列表设置为QFutureWatcher

将QFutures列表设置为QFutureWatcher
EN

Stack Overflow用户
提问于 2015-06-29 13:46:21
回答 1查看 901关注 0票数 0

可以向QFutureWatcher添加多个QFuture吗?我想向QFutureWatcher添加多个功能,并在所有线程完成时得到通知。

QFutureSynchronizer没有帮助我,因为它没有完成的信号

EN

回答 1

Stack Overflow用户

发布于 2017-03-06 12:00:03

我是这样使用它的:

代码语言:javascript
复制
QFutureSynchronizer<...> _synchronizer;
QFutureWatcher<...> _watcher;

-

代码语言:javascript
复制
void Service::request(const QString& word)
{
    QMutexLocker lock{&_mutex};

    auto future = QtConcurrent::run([this, word]()
                                    {
                                        //...
                                    });
    _synchronizer.addFuture(future);
    if (_watcher.isRunning() == false)
    {
        _watcher.setFuture(future);
    }
}

void Service::onReady()
{
    QMutexLocker lock{&_mutex};
    auto futures = _synchronizer.futures();
    _synchronizer.clearFutures();
    auto removeFrom = std::remove_if(futures.begin()
                                     , futures.end()
                                     , [](const QFuture<QPair<QString, QVector<QString>>>& element)
            {
                return element.isFinished();
            });

    for (auto it = futures.begin(); it != removeFrom; ++it)
    {
        _synchronizer.addFuture(*it);
    }
    for (auto it = removeFrom; it != futures.end(); ++it)
    {
        //...
    }

    auto waitingOnes = _synchronizer.futures();
    if (waitingOnes.isEmpty() == false && _watcher.isFinished())
    {
        _watcher.setFuture(waitingOnes.front());
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31108595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档