QT上位机开发(函数运行时间分析)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        软件除了功能开发、debug之外,另外一个很重要的部分就是软件的优化和提高。这里面的优化,当然就是希望软件能够处理更多的数据、达到更高的效率。在这一方面,qt也不例外。不过qt本身已经提供了的类似的功能类,使用起来特别方便。我们今天正好趁这个机会学习下,应该怎么用qt提供的类或者api接口来测量对应函数的运行时间。

1、创建基础的widget工程

        首先,我们创建一个基础的widget工程,纯粹是为了代码编译方便。

2、开始编写代码

        qt下面对函数进行时间统计,用到的头文件是QElapsedTimer这个文件,类也是同名类。使用的时候呢,首先创建一个QElapsedTimer类型的变量timer。接着statimer定时器,在调用了对应的测试函数之后,继续调用timer.elapsed()函数。这样我们就可以知道当前总共花了多少时间。这么说可能有点空泛,我们来通过代码进行分析。

#include <Windows.h>
#include <QApplication>
#include <QElapsedTimer>
#include <QDebug>

int main(int argc, char *argv[]) {
	QApplication app(argc, argv);

	QElapsedTimer timer;
	timer.start(); // start, get start value

	// invoke myFunction here
	Sleep(1000);

	qint64 elapsedTime = timer.elapsed(); // get stop value
	qDebug() << "Function execution time:" << elapsedTime << "milliseconds";

	return app.exec();
}

        为了测试这个时间是不是真的有那么准,我们用windows平台提供的Sleep函数来进行验证。如果得到elapsedTimer没有什么问题,那代表相关的测量是完全ok的。

3、测试另外一个具体函数

        之前的延时是1000ms,得到的打印是1010ms,看上去不是特别离谱。因此,我们可以测试另外一个循环,看看函数花了多少时间,整个代码是这样的,

#include <Windows.h>
#include <QApplication>
#include <QElapsedTimer>
#include <QDebug>

// measure
void myFunction() {
	for (int i = 0; i < 100000000; ++i) {
		// some operation
	}
}

int main(int argc, char *argv[]) {
	QApplication app(argc, argv);

	QElapsedTimer timer;
	timer.start(); // start, get start value

	// invoke myFunction here
	myFunction();

	qint64 elapsedTime = timer.elapsed(); // get stop value
	qDebug() << "Function execution time:" << elapsedTime << "milliseconds";

	return app.exec();
}

        测试函数myFunction当中,i循环了1亿次,我们看下大约需要花费多少时间,

4、总结

        不管是windows平台,还是linux平台,对函数、模块和功能进行时间分析和统计,这都是基本技能,建议大家可以好好掌握一下。另外及时不是qt模块,最好大家也可以自己写出对应的时间统计函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/319255.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Beego]1.Beego简介以及beego环境搭建,bee脚手架的使用,创建,运行项目

一.Beego介绍 Beego是一个开源的基于Golang的MVC框架&#xff0c;主要用于Golang Web开发,Beego可以用来快速开发API、Web、后端服务等各种应用。 Golang 的Web开发框架有很多,从 github star 数量来看Gin>Beego>lris>Echo>Revel>Buffalo 目前国内用的比较多的就…

在ubuntu平台上安装minecraft

一、获取minecraft启动器安装包 登陆minecraft官网Welcome to the Minecraft Official Site | Minecraft&#xff0c;使用已经购买minecraft的microsoft或者mojang账号登陆。 点击Download Launcher 对于ubuntu系统&#xff0c;使用点击debian版本 此后便会自动下载Minecraft.…

基于pyradiomics影像组学特征提取

基于pyradiomics影像组学特征提取 特征提取&#xff1a;1 pyradiomics的使用&#xff1a;1.1&#xff0c;在python环境下安装pyradiomics:1.2,设置特征提取器&#xff0c;获得想要特征&#xff1a;1.2.1 图像类型1.2.2 目标特征设置1.2.3 特征提取器设置 2 代码示例;参考&#…

关于提高IDEA运行速度的说明

1.作者IDEA软件版本和计算机内存 Ultimate 2022.1.2版 2.修改配置提高IDEA运行速度的误区 很多文章会教调内存&#xff0c;但大多是让你调高堆内存&#xff0c;-Xms -Xmx 是最小堆内存和最大堆内存。堆内存越高&#xff0c;说明堆区可放入新对象的数量越多&#xff0c;由于…

关闭免费版pycharm社区版双击shift时出现的搜索框

Pycharm 在双击 shift 的时候总是弹出搜索框&#xff0c;但作为中国玩家&#xff0c;经常需要双击 shift 循环切换中英文。这就很困恼。 下面就解决这个问题。单独关闭双击shift的功能。 步骤 1.左上角 File -> Settings 2. 如图&#xff0c;输入‘advan’ 找到高级设置&…

分享从零开始学习网络设备配置--任务4.4 使用动态路由OSPFv3实现网络连通

任务描述 由于RIPng不适用于复杂的网络&#xff0c;考虑到公司的未来发展&#xff0c;需要不断扩大网络规模。某公司在企业网络升级时&#xff0c;选择 OSPFv3路由协议实现网络连通&#xff0c;降低网络拓扑变化引发的人工维护工作量并加快网络收敛的速度。 公司内部的所有设…

Leetcode26——引出c++ vector中erase()的内部原理

erase是对数组中某个元素进行删除的操作&#xff0c;实际的时间复杂度为O(n) 预备知识 数组在内存中是连续存储的&#xff0c;删除某个位置的时候不能直接删除&#xff0c;只能用后序的元素覆盖 以nums数组为例&#xff0c;target为需要删除的目标数据 方法&#xff1a; ①…

Windows无法登录管理路由器故障排查

问题描述 家里的路由器使用拨号上网&#xff0c;路由器DHCP分发IP的范围是192.168.1.0/24。默认使用192.168.1.1管理路由器。然后拨号上网成功后&#xff0c;修改了私网IP的分发范围&#xff1a;192.168.5.1-192.168.5.10。为了防止有人蹭网&#xff0c;只分配的10个IP地址。修…

Android Studio由于开启代理无法下载依赖,一直在Build model

一、问题描述 正常打开AS项目&#xff0c;一直显示Build model就是不下载依赖 二、问题解决 1、首先选择No Proxy&#xff0c;可以看到这位同学之前是使用的代理。 2、打开下面文件&#xff0c;然后删除某尾的4行。 3、面对提示框&#xff0c;直接点击OK。 4、然后停…

Trans论文复现:基于数据驱动的新能源充电站两阶段规划方法程序代码!

适用平台&#xff1a;MatlabYalmipCplex/Gurobi&#xff1b; 文章提出了一种电动汽车充电站的两阶段规划方法&#xff0c;第一阶段通过蒙特卡洛法模拟充电车辆需求和电池充放电数据来确定充电站位置&#xff1b;第二阶段通过数据驱动的分布鲁棒优化方法优化充电站的新能源和电池…

用Lisp的方言HY跑飞桨训练和推理

用Lisp的方言HY跑飞桨训练和推理 整个项目可以在AIStudio一键跑通&#xff1a;用Lisp的方言HY跑飞桨训练和推理 - 飞桨AI Studio星河社区 初见Lisp 估计很多人都看过《黑客与画家》这本书&#xff0c;百度百科中的条目&#xff1a;《黑客与画家&#xff1a;硅谷创业之父paul…

NUS CS1101S:SICP JavaScript 描述:一、使用函数构建抽象

原文&#xff1a;1 Building Abstractions with Functions 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 心灵的行为&#xff0c;其中它对简单的想法施加其力量&#xff0c;主要有以下三种&#xff1a;1.将几个简单的想法组合成一个复合的想法&#xff0c;从而形成所…

阿里状态机引擎实现

状态机的技术选型看这篇就够了&#xff0c;最后一个直叫好&#xff01; - 掘金 实现一个状态机引擎&#xff0c;教你看清DSL的本质_cola状态机-CSDN博客 一、引入jar包 <!--阿里状态机jar--> <dependency><groupId>com.alibaba.cola</groupId><a…

Python | 三、函数

函数的形参和实参&#xff08;对应卡码网11题句子缩写&#xff09; 除非实参是可变对象&#xff0c;如列表、字典和集合&#xff0c;则此时形参会复制实参的地址&#xff0c;即此时二者指向同一个地址&#xff0c;因此在函数内对形参的操作会影响到实参除这种情况外&#xff0…

Spring自带分布式锁你用过吗?

环境&#xff1a;SpringBoot2.7.12 本篇文章将会为大家介绍有关spring integration提供的分布式锁功能。 1. 简介 Spring Integration 是一个框架&#xff0c;用于构建事件驱动的应用程序。在 Spring Integration 中&#xff0c;LockRegistry 是一个接口&#xff0c;用于管理…

推荐两款好用的卫星地图。

问题描述&#xff1a;推荐两款好用的卫星地图。 问题解决&#xff1a;谷歌地球、高德卫星地图。个人感觉谷歌地球好用一些。

ST工具Flash Loader烧写STM32

简介 使用ST公司自家的Flash Loader烧写程序&#xff0c; 如下图, F103直接接USART1到PC端就好, 使用普通的USB转TTL线&#xff0c; 就是你之前使用串口打印的方式连接到电脑就好。 软件下载 ST Flash Loader 我放到CSDN里面了Flash_Loader_demo_v2.8.0 开发板设置 Boot0-&g…

序章 熟悉战场篇—了解vue的基本操作

了解vue 的基本目录&#xff1a; dist 是打包后存放的目录(后续可以改)node_modules 是依赖包public 是静态index页面src 是存放文件的目录assets 是存放静态资源的目录components 是存放组件的目录views 是存放页面文件的目录&#xff08;没有views 自己新建一个&#xff09;A…

动态规划篇-03:打家劫舍

198、打家劫舍 状态转移方程 base case 边界问题就是&#xff1a;走到最后一间房子门口也没抢&#xff0c;那么最终抢到的金额为0 明确状态 “原问题和子问题中会变化的变量” 抢到的金额数就是状态&#xff0c;因为随着在每一件房子门口做选择&#xff0c;抢到的金额数会随…

Unity中的异步编程【7】——在一个异步方法里播放了animation动画,取消任务时,如何停止动画播放

用一个异步方法来播放一个动画&#xff0c;正常情况是&#xff1a;动画播放结束时&#xff0c;异步方法宣告结束。那如果我提前取消这个异步任务&#xff0c;那在这个异步方法里面&#xff0c;我要怎么停止播放呢&#xff1f;&#xff01; 一、播放animation动画的异步实现 1…