IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

QtFuture Namespace

Contains miscellaneous identifiers used by the QFuture class.

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

QtFuture Namespace

  • Header: QFuture

  • CMake:

    find_package(Qt6 REQUIRED COMPONENTS Core)

    target_link_libraries(mytarget PRIVATE Qt6::Core)

  • qmake: QT += core

Detailed Description

 

Type Documentation

 

[since 6.0] enum QtFuture::Launch

Represents execution policies for running a QFuture continuation.

Constant

Value

Description

QtFuture::Launch::Sync

0

The continuation will be launched in the same thread in which the parent has been executing, or in the thread where the parent lives if the continuation is attached after the parent has already finished.

QtFuture::Launch::Async

1

The continuation will be launched in in a separate thread taken from the global QThreadPool.

QtFuture::Launch::Inherit

2

The continuation will inherit the launch policy of the parent or its thread pool, if it was using a custom one.

This enum was introduced or modified in Qt 6.0.

See Also

Function Documentation

 

QFuture<ArgsType<Signal>> QtFuture::connect(Sender *sender, Signal signal)

Creates and returns a QFuture which will become available when the sender emits the signal. If the signal takes no arguments, a QFuture<void> is returned. If the signal takes a single argument, the resulted QFuture will be filled with the signal's argument value. If the signal takes multiple arguments, the resulted QFuture is filled with std::tuple storing the values of signal's arguments. If the sender is destroyed before the signal is emitted, the resulted QFuture will be canceled.

For example, let's say we have the following object:

 
Sélectionnez
class Object : public QObject
{
    Q_OBJECT
    ...
signals:
    void noArgSignal();
    void singleArgSignal(int value);
    void multipleArgs(int value1, double value2, const QString &amp;value3);
};

We can connect its signals to QFuture objects in the following way:

 
Sélectionnez
Object object;
QFuture&lt;void&gt; voidFuture = QtFuture::connect(&amp;object, &amp;Object::noArgSignal);
QFuture&lt;int&gt; intFuture = QtFuture::connect(&amp;object, &amp;Object::singleArgSignal);

using Args = std::tuple&lt;int, double, QString&gt;;
QFuture&lt;Args&gt; tupleFuture = QtFuture::connect(&amp;object, &amp;Object::multipleArgs)

We can also chain continuations to be run when a signal is emitted:

 
Sélectionnez
QtFuture::connect(&amp;object, &amp;Object::singleArgSignal).then([](int value) {
    // do something with the value
});

You can also start the continuation in a new thread or a custom thread pool using QtFuture::Launch policies. For example:

 
Sélectionnez
QtFuture::connect(&amp;object, &amp;Object::singleArgSignal).then(QtFuture::Launch::Async, [](int value) {
    // this will run in a new thread
});

Throwing an exception from a slot invoked by Qt's signal-slot connection is considered to be an undefined behavior, if it is not handled within the slot. But with QFuture::connect(), you can throw and handle exceptions from the continuations:

 
Sélectionnez
QtFuture::connect(&amp;object, &amp;Object::singleArgSignal).then([](int value) {
    ...
    throw std::exception();
    ...
}).onFailed([](const std::exception &amp;e) {
    // handle the exception
}).onFailed([] {
    // handle other exceptions
});

The connected future will be fulfilled only once, when the signal is emitted for the first time.

See Also

See also QFuture, QFuture::then()

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+