[Development] Evolving Qt's multithreading API
Andre Somers
andre at familiesomers.nl
Sat Mar 2 11:17:52 CET 2013
Op 22-2-2013 11:57, Sze Howe Koh schreef:
>> Some more common use case would be (pseudo-code)
>> >
>> >auto watcher = new QFutureWatcher;
>> >QObject::connect(watcher, SIGNAL(finished()), myObject, SLOT(doStuff()));
>> >watcher->setFuture(QThrerad::run([]() { return computeStuff(); } ));
>> >// who deletes the watcher?
> If the caller creates the watcher, I think it's fine to let the caller
> delete it too. It's an ordinary C++ practice.
>
Actually, how do you feel about adding an optional _then_ argument to
the list of arguments of the functions in QtConcurrent and whatever is
decided to replace the QtConcurrent::run feature? Such a _then_ argument
could be a slot signature, a function pointer or a lambda function
(basically, whatever you can use in the Qt 5 QObject::connect). That
would make it quite a bit easier to work with, I think. It would
eliminate the need to create (and delete) a QFutureWatcher for a lot of
cases. The method you passed into the _then_ argument would be called
when the future is ready. It would be very nice if the _then_ argument
could optionally have an argument of the return type of QFuture::result.
For this to work, QFuture would not need to be a QObject itself, and
because you pass in the _then_ argument with the call itself, you don't
have the race issues that you get if you need to connect in separate
calls after you have already fired off the thread: no need for
trampoline objects or the like.
André
More information about the Development
mailing list