QFuture
是 Qt 提供的一个类,用于表示异步操作的返回值或状态。异步操作指的是那些不会阻塞主线程的操作,例如文件读写、网络请求、计算等等。
在执行异步操作时,可以使用 QtConcurrent
模块提供的函数 (QFuture<T> QtConcurrent::run(Function function, ...)
等等)来进行封装和管理。这些函数会在一个单独的线程中执行指定的函数,并返回 QFuture
对象。
QFuture
对象提供了以下功能:
- 获取异步操作的执行状态,例如已完成、正在执行、已取消等等。
- 获取异步操作的返回值(如果存在)。
- 等待异步操作完成,并阻塞主线程直到操作完成。
- 监听异步操作的完成事件,并指定对应的槽函数进行处理。
下面是一个简单的使用 QFuture
的示例:
// 执行一个异步操作,返回一个 QFuture<int> 对象
QFuture<int> future = QtConcurrent::run([](){
int result = doSomeWork(); // 假设这是一个耗时的操作
return result;
});
// 获取异步操作的返回值,如果操作未完成则等待
int value = future.result();
// 监听异步操作的完成事件
connect(&future, &QFuture<int>::finished, [&](){
qDebug() << "Async operation finished with value" << future.result();
});
需要注意的是,由于异步操作可能会在另一个线程中执行,因此在访问操作的返回值时可能需要加锁以避免数据竞争。此外,如果异步操作涉及 GUI 元素,则需要使用 QMetaObject::invokeMethod()
等函数将操作的结果传递到主线程中进行 GUI 更新。