[Interest] Guarantee on finished emission with multiple QFutureWatchers?

Elvis Stansvik elvstone at gmail.com
Thu Oct 18 16:53:57 CEST 2018


Hi all,

Is there any guarantee on the order in which the
QFutureWatcher::finished signal will be emitted when multiple
QFutureWatchers are hooked up to the same QFuture?

When the QFuture finishes, will finished be emitted by the
QFutureWatchers in the order in which setFuture were called upon them?
Or is there no guarantee?

I'm thinking of a use case like (rough pseudo code):

QFuture CachingReader::readAsync(...) {
    if (result is available in cache) {
        QFutureInterface interface;
        interface.reportFinished(result from cache);
        return QFuture(interface);
    }

    future = QtConcurrent::run(readStuff, ...);
    watcher = QFutureWatcher();
    connect(watcher, finished, [this, future]() {
        // store future.result() in cache
    });
    watcher.setFuture(future);

    return future;
}

In this case, I'd really like the QFutureWatcher set up internally by
the function to be the one that fires first. It is guaranteed to be
the first one that calls QFutureWatcher::setFuture(..) with that
QFuture as parameter, but I'm not sure if that's any guarantee here?

Thanks in advance,
Elvis



More information about the Interest mailing list