[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