Qt简单的异步操作实现方法

Qt简单的异步操作实现方法

在实际应用中,经常会遇到一些耗时操作,导致了主线程的阻塞,这时候可以使用异步操作来避免阻塞。

Qt的异步操作需要使用下面的库

#include 

然后将耗时操作丢进下面的函数中即可。

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管理的线程实际是从线程池分配线程资源的,而绑定QFutureWatcher的槽是在主线程中执行的。在需要单次执行且内部逻辑较简单的时候使用QtConccurrent + QFuture + QFutureWatcher是很方便的,可以减少很多编码工作量,而且在多cpu环境中,QtConccurent也会启用多核。

你可能感兴趣的:(Qt,qt)