[Interest] parallel asynchrone action

Elvis Stansvik elvstone at gmail.com
Sun Mar 3 22:56:17 CET 2019


There should be no such delay in QFutureWatcher. I've never seen that,
and I've used QtConcurrent::run/mapped + QFutureWatcher quite a lot.

I would investigate that before making my own mechanism.

Elvis

Den lör 2 mars 2019 kl 21:13 skrev Sylvain Pointeau
<sylvain.pointeau at gmail.com>:
>
> Dear all,
>
> I made an action processed in another thread in QML, and I would like your review.
>
> 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 complete.
> 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..."
>
>         taskc.doCalculation(Number(p1.text),Number(p2.text))
>
>         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, &TaskComputer::futureFinished);
>
>
>         // do the task
>
>
>         TaskResult tres(/*...my results...*/);
>
>
>         emit tnotifier.finished(tres);
>
>     } );
>
> }
>
>
> void TaskComputer::futureFinished(TaskResult rs)
>
> {
>
>     // do some stuff
>
>
>     emit calculationFinished(rs);
>
> }
>
>
> Best regards,
> Sylvain
>
>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> https://lists.qt-project.org/listinfo/interest



More information about the Interest mailing list