CopperSpice API
1.9.2
|
A header which supports running functions in separate threads. More...
These functions are provided to support Concurrent Programming. The QtConcurrent::run() function runs a function in a separate thread. The return value of the function is made available through the QFuture API.
To run a function in another thread use QtConcurrent::run(). This will run aFunction in a separate thread obtained from the default QThreadPool. You can use the QFuture and QFutureWatcher classes to monitor the status of the function.
Passing arguments to the function is done by adding them to the QtConcurrent::run() call immediately after the function name. A copy of each argument is made at the point where QtConcurrent::run() is called, and these values are passed to the thread when it begins executing the function. Changes made to the arguments after calling QtConcurrent::run() are not visible to the thread.
Any return value from the function is available by calling QFuture.
If you need to pass arguments use code similar to the following.
The QFuture::result() method blocks and waits for the result to become available. Use QFutureWatcher to get notification when the function has finished execution and the result is available.
QtConcurrent::run() also accepts pointers to member functions. The first argument must be either a const reference or a pointer to an instance of the class. Passing by const reference is useful when calling const member functions; passing by pointer is useful for calling non-const member functions that modify the instance.
For example, calling QByteArray::split() (a const member function) in a separate thread is done like this:
Calling a non-const member function is done like this:
If you want to use a filter function which takes more than one argument use a lambda expression. As an example, we will use QString::left(). Since QString::left() is a method it can not be used with QtConcurrent::run() directly. This is because QtConcurrent::run() expects a function which takes no arguments.