iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >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://www.lsjlt.com/news/171226.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt之简单的异步操作实现方法
    目录Qt简单的异步操作Qt异步变同步问题解决的问题如何实现代码块解析Qt简单的异步操作 在实际应用中,经常会遇到一些耗时操作,导致了主线程的阻塞,这时候可以使用异步操作来避免阻塞。 ...
    99+
    2022-11-13
    Qt异步操作 Qt异步 Qt实现异步操作
  • Qt实现制作简单的计算器
    目录前言完整代码效果图前言 今天使用qt制作了一个很简单的计算器,觉得挺有意思的,所以在这里跟大家分享一下。 这里先跟大家说说使用到的函数: 1、槽连接函数 connect(信号发送...
    99+
    2022-12-19
    Qt实现计算器 Qt计算器
  • Qt Designer的简单使用方法
    在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用 C++ 代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。 用 ...
    99+
    2024-04-02
  • JavaScript异步操作同步执行的方法
    本文小编为大家详细介绍“JavaScript异步操作同步执行的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript异步操作同步执行的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    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
  • Pythonasyncio异步编程简单实现示例
    目录一、asyncio事件循环简介二、async协程函数简介三、await关键字四、async异步编程简单实现今天继续给大家介绍Python相关知识,本文主要内容是Python as...
    99+
    2023-01-18
    Python asyncio异步 Python asyncio
  • PHP怎么实现异步操作
    这篇文章主要讲解了“PHP怎么实现异步操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP怎么实现异步操作”吧!1.为啥PHP需要异步操作?一般来说PHP适用的场合是web页面展示等耗时...
    99+
    2023-06-04
  • Python执行ping操作的简单方法
    目录1 基本信息2 安装方法3 一般使用4 ping的返回值4.1 返回值类型以及常用属性4.2 ResponseList中的每个Response对象的属性4.3 pythonpin...
    99+
    2023-02-14
    Python执行ping操作 Python执行ping
  • C#如何实现异步操作
    这篇文章给大家分享的是有关C#如何实现异步操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。.NET Framework 为异步操作提供了两种设计模式:使用 IAsyncResult 对象的异步操作与使用事件的异...
    99+
    2023-06-18
  • springboot简单接入websocket的操作方法
    序 最近一个项目又重启了,之前支付了要手动点击已付款,所以这次想把这个不友好体验干掉。另外以后的扫码登录什么的都需要这个服务支持。之前扫码登录这块用的mqtt,时间上是直接把mqt...
    99+
    2024-04-02
  • javascript的异步操作方法是什么
    这篇“javascript的异步操作方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2024-04-02
  • 如何实现AJAX简单异步通信
    这篇文章主要讲解了“如何实现AJAX简单异步通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现AJAX简单异步通信”吧!具体分析如下:客户端:向服务...
    99+
    2024-04-02
  • Java Swing实现画板的简单操作
    Java Swing 画板的操作(修改颜色,更改图形,清除,任务栏按钮),供大家参考,具体内容如下 话不多说,直接看代码 package Swing; import javax.sw...
    99+
    2024-04-02
  • js实现封装jQuery的简单方法与链式操作详解
    目录1. 实现$(".box1").click( )方法 2. 实现$("div").click( )方法 3. 考虑$( )中参数的三种情况 4. 实现jq中的on方法 5. 实现...
    99+
    2024-04-02
  • ADO.NET中怎么实现异步操作
    ADO.NET中怎么实现异步操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。线程是允许程序的一部分独立于其他部分运行。线程可以在单个线程执行的同时运行多个操作,让用户感到像同...
    99+
    2023-06-17
  • Apache Hudi异步Clustering部署操作的方法
    本文小编为大家详细介绍“Apache Hudi异步Clustering部署操作的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Apache Hudi异步Clustering部署操作的方法”文章能帮助大家解决疑惑,下...
    99+
    2023-06-29
  • C++中怎么实现异步操作
    C++中怎么实现异步操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现(代码)#include <iostream> #include&nb...
    99+
    2023-06-17
  • javascript实现异步的方法
    这篇文章给大家分享的是有关javascript实现异步的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。javascript实现异步的方法:1、使用setTimeout方法;2、使用setImmediate 方...
    99+
    2023-06-14
  • C#中怎么实现异步操作
    C#中怎么实现异步操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。//首先准备好,要进行异步的方法(能异步的,***不多线程)  private ...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作