[Interest] parallel asynchrone action

Sylvain Pointeau sylvain.pointeau at gmail.com
Sat Mar 2 21:11:50 CET 2019

Dear all,

I made an action processed in another thread in QML, and I would like your

When in QML, I click on a button, I send a signal to an object
"TaskProcessor" (declared in QML) to start the action.
Within this slot I start a future with QtConcurrent.

Before I was using QFutureWatcher to know when the future is finished, but
I observed a delay of 1 seconde if the future was taking 4 secondes to
so now I use one object ("TaskNotifier") instantiated in the concurrent
lambda, that connect to "this", and trigger a message to "TaskProcessor"
when it finishes.
TaskProcessor then triggers a signal to QML with the result.

Is this approach good? I was wondering if this is really the way to follow
Do you use another approach?

in QML:

Button {

    id: btnStart

    text: "Start"

    onClicked: {

        output.text = "computing..."


        enabled = false



TaskComputer {

    id: taskc

    onCalculationFinished: {

        btnStart.enabled = true

        *// do something with rs*



in C++:

void TaskComputer::doCalculation(int p1, int p2)


    QFuture<void> f1 = QtConcurrent::run( [this, p1, p2]() -> int {

        TaskNotifier tnotifier;

        connect(&tnotifier, &TaskNotifier::finished, this,

        // do the task

        TaskResult tres(/*...my results...*/);

        emit tnotifier.finished(tres);

    } );


void TaskComputer::futureFinished(TaskResult rs)


    // do some stuff

    emit calculationFinished(rs);


Best regards,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20190302/9c4a3dad/attachment.html>

More information about the Interest mailing list