Qt简单的异步操作实现方法
方案一
在实际应用中,经常会遇到一些耗时操作,导致了主线程的阻塞,这时候可以使用异步操作来避免阻塞。
Qt的异步操作需要使用下面的库
#include <QtConcurrent>
然后将耗时操作丢进下面的函数中即可。
QtConcurrent::run([=]() {
func();
});
如果需要判断耗时操作执行完毕与否,可以使用QFuture和QFutureWatcher的结合。QFuture 表示异步计算的结果,QFutureWatcher 则允许使用信号和槽监视 QFuture。
代码如下。
QFutureWatcher<void> *pwatcher = nullptr;
pwatcher = new QFutureWatcher<void>;//把扫描到的wifi信息输出到指定文件
QFuture<void> future = QtConcurrent::run([=]() {
func(); //耗时操作
});connect(pwatcher, &QFutureWatcher<void>::finished, this, [=]() {
core(); //主线程操作
});pwatcher->setFuture(future);
QtConccurent管理的线程实际是从线程池分配线程资源