如何利用QFuture等待QThread的结束
时间: 2024-09-27 14:03:39 浏览: 22
在Qt中,`QFuture` 和 `QThreadPool` 结合使用时,可以方便地等待线程(如 `QThread`)的结束。当你将一个任务交给线程池执行,并返回一个 `QFuture` 对象,你可以通过调用 `future.waitForFinished()` 来阻塞并等待线程完成。
以下是一个简单的例子:
```cpp
// 创建线程池
QThreadPool globalThreadPool;
// 创建一个工作函数,放入线程池执行
std::function<void()> taskFunction = [](){
WorkerThread worker; // 自定义线程类
worker.moveToThread(&globalThreadPool); // 将工作放到线程池里运行
worker.finished.connect([](bool result){
// 当线程完成,这里会被调用
qDebug() << "Task finished";
});
worker.start(); // 启动线程
};
// 使用QFuture等待线程结束
QFuture<void> future = globalThreadPool.enqueue(taskFunction);
// 等待线程结束
future.waitForFinished();
qDebug() << "Task is now complete"; // 这行会在任务完成后输出
```
在这个例子中,我们首先创建了一个全局线程池 `globalThreadPool`,然后将一个匿名函数作为任务添加到线程池,该函数启动一个新的 `WorkerThread`。`finished` 信号被连接到一个槽函数,当工作线程完成时,信号会被发送并触发槽函数,输出 "Task finished"。最后,调用 `future.waitForFinished()` 确保线程执行完毕。
阅读全文