返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Qt之简单的异步操作实现方法
  • 415
分享到

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

Qt异步操作Qt异步Qt实现异步操作 2022-11-13 19:11:39 415人浏览 安东尼
摘要

目录Qt简单的异步操作Qt异步变同步问题解决的问题如何实现代码块解析Qt简单的异步操作 在实际应用中,经常会遇到一些耗时操作,导致了主线程的阻塞,这时候可以使用异步操作来避免阻塞。

Qt简单的异步操作

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

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

#include <QtConcurrent/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管理的线程实际是从线程池分配线程资源的,而绑定QFutureWatcher的槽是在主线程中执行的。

在需要单次执行且内部逻辑较简单的时候使用QtConccurrent + QFuture + QFutureWatcher是很方便的,可以减少很多编码工作量,而且在多cpu环境中,QtConccurent也会启用多核。

Qt异步变同步问题

解决的问题

很多情况会出现多线程程序,再进行操作时候,其中一个线程的逻辑执行需要另外一个线程的一个信号,那么异步变同步就变得无比重要

如何实现

使用:QEventLoop类

The QEventLoop class provides a means of entering and leaving an event loop.

QEventLoop类提供了一种进入和离开事件循环的方法。  

At any time, you can create a QEventLoop object and call exec() on it to start a local event loop. From within the event loop, calling exit() will force exec() to return.

在任何时候,您都可以创建一个QEventLoop对象并在其上调用exec()来启动一个本地事件循环。 在事件循环中,调用exit()将强制返回exec()。  

代码块解析

    QEventLoop q;
    QTimer t;
    t.setSingleShot(false);
    connect(&t, &QTimer::timeout, this, [=](){
        //TODO SOMETHING
    });
    connect(this, SIGNAL(connectStatusChangedSig()), &q, SLOT(quit()));  //异步调用完成退出
    t.start(50);
    q.exec();

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Qt之简单的异步操作实现方法

本文链接: https://lsjlt.com/news/171226.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Qt之简单的异步操作实现方法
    目录Qt简单的异步操作Qt异步变同步问题解决的问题如何实现代码块解析Qt简单的异步操作 在实际应用中,经常会遇到一些耗时操作,导致了主线程的阻塞,这时候可以使用异步操作来避免阻塞。 ...
    99+
    2022-11-13
    Qt异步操作 Qt异步 Qt实现异步操作
  • Qt实现制作简单的计算器
    目录前言完整代码效果图前言 今天使用qt制作了一个很简单的计算器,觉得挺有意思的,所以在这里跟大家分享一下。 这里先跟大家说说使用到的函数: 1、槽连接函数 connect(信号发送...
    99+
    2022-12-19
    Qt实现计算器 Qt计算器
  • python win32 简单操作方法
    源由 刚开始是帮朋友做一个按键精灵操作旺信的脚本,写完后各种不稳定;后来看到python可以操作win32相关的api,恰好这一段时间正在学习python,感觉练手的时候到了~~~ 下载 要注意Python...
    99+
    2022-06-04
    操作方法 简单 python
  • Qt Designer的简单使用方法
    在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用 C++ 代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。 用 ...
    99+
    2024-04-02
  • nodejs简单实现操作arduino
    用Javascript来操作硬件早就不是一件稀奇的事情了。 所以作为一名电子专业出身的FE,我也打算尝试一下用js来驱动arduino; 要想操作这些底层硬件,肯定是需要一些工具的,我这里介绍的工具主要是 ...
    99+
    2022-06-04
    操作 简单 nodejs
  • JavaScript异步操作同步执行的方法
    本文小编为大家详细介绍“JavaScript异步操作同步执行的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript异步操作同步执行的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    99+
    2024-04-02
  • 简单掌握mysql的操作方法
    本文主要给大家简单讲讲mysql的操作方法,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望mysql的操作方法这篇文章可以给大家带来一些实际帮助。##mysq...
    99+
    2024-04-02
  • 备份MYSQL的简单操作方法
    下文主要给大家带来备份MYSQL的简单操作方法,希望这些内容能够带给大家实际用处,这也是我编辑备份MYSQL的简单操作方法这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。备份类型及特点冷备(cold...
    99+
    2024-04-02
  • c语言简单实现文件 r/w 操作方法
    数据的输入和输出几乎伴随着每个 C 语言程序,所谓输入就是从“源端”获取数据,所谓输出可以理解为向“终端”写入数据。这里的源端可以是键盘、鼠标、硬盘、光盘、扫描仪等输入设备,终端可以...
    99+
    2024-04-02
  • Qt为exe添加ico图片的简单实现步骤
    目录前言1、创建文件夹以及准备文件2、添加文件3、修改工程文件4、重新编译总结前言 发布exe的时候一般都会弄一个图标,不然默认的方框太难看了,所以这里记录一下过程。 1、创建文件夹...
    99+
    2024-04-02
  • C#如何实现异步操作
    这篇文章给大家分享的是有关C#如何实现异步操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。.NET Framework 为异步操作提供了两种设计模式:使用 IAsyncResult 对象的异步操作与使用事件的异...
    99+
    2023-06-18
  • PHP怎么实现异步操作
    这篇文章主要讲解了“PHP怎么实现异步操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP怎么实现异步操作”吧!1.为啥PHP需要异步操作?一般来说PHP适用的场合是web页面展示等耗时...
    99+
    2023-06-04
  • javascript的异步操作方法是什么
    这篇“javascript的异步操作方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2024-04-02
  • 如何实现AJAX简单异步通信
    这篇文章主要讲解了“如何实现AJAX简单异步通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现AJAX简单异步通信”吧!具体分析如下:客户端:向服务...
    99+
    2024-04-02
  • Pythonasyncio异步编程简单实现示例
    目录一、asyncio事件循环简介二、async协程函数简介三、await关键字四、async异步编程简单实现今天继续给大家介绍Python相关知识,本文主要内容是Python as...
    99+
    2023-01-18
    Python asyncio异步 Python asyncio
  • Python简单操作sqlite3的方法示例
    本文实例讲述了Python简单操作sqlite3的方法。分享给大家供大家参考,具体如下: import sqlite3 def Test1(): #con =sqlite3.connect("D:\...
    99+
    2022-06-04
    示例 操作 简单
  • springboot简单接入websocket的操作方法
    序 最近一个项目又重启了,之前支付了要手动点击已付款,所以这次想把这个不友好体验干掉。另外以后的扫码登录什么的都需要这个服务支持。之前扫码登录这块用的mqtt,时间上是直接把mqt...
    99+
    2024-04-02
  • Python执行ping操作的简单方法
    目录1 基本信息2 安装方法3 一般使用4 ping的返回值4.1 返回值类型以及常用属性4.2 ResponseList中的每个Response对象的属性4.3 pythonpin...
    99+
    2023-02-14
    Python执行ping操作 Python执行ping
  • Java Swing实现画板的简单操作
    Java Swing 画板的操作(修改颜色,更改图形,清除,任务栏按钮),供大家参考,具体内容如下 话不多说,直接看代码 package Swing; import javax.sw...
    99+
    2024-04-02
  • C++中怎么实现异步操作
    C++中怎么实现异步操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现(代码)#include <iostream> #include&nb...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作