QT调用matlab程序卡顿时间测试

文章详细描述了使用QT5.14.1调用MATLABR2022b程序的时间测试过程。测试发现首次调用会有一段延迟,后续调用则速度快很多。作者通过创建三个MATLAB函数并生成lib库,集成到QT项目中,观察不同顺序调用的时间差异,分析了可能的原因。处理办法包括对MATLAB程序的预初始化来减少延迟。
摘要由CSDN通过智能技术生成

一. 内容简介

QT调用matlab程序,首先会卡一下,第二次就不会卡了,就针对这个情况做一下,QT调用matlab程序所需时间的测试。

二. 软件环境

2.1QT 5.14.1

新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序,所以就采用5.14.1这个用的比较多也比较稳定的一个版本。

QT编译器采用的是MSVC2017 64bit。

链接:https://pan.baidu.com/s/1ER98DPAkTUPlIyCC6osNNQ?pwd=1234

2.2 MatlabR2022b(64位)

2.3 Visual studio 2017

Visual stdio采用2017主要是因为QT5.14.1最高到MSVC2017 64bit。

2.4 测试代码

链接:https://pan.baidu.com/s/1tNBFa4OCE5ORUuhRCOvhpg?pwd=1234

三.主要流程

3.1 用matlab生成三个lib库,并且添入项目里面

3.2 页面说明

3.3 测试过程以及结果分析

3.4 处理办法

四.具体步骤

4.1 用matlab生成三个lib库,并且添入项目里面

matlab文件创了三个,分别是ceshi1,ceshi2,cheshi3,代码如下

//cheshi1
function  [C]= matAdd(A,B)
C=A+B;
end
//cheshi2
function  [C]= matAdd2(A,B)
C=A+B;
end
//cheshi3
function  [C]= matAdd2(A,B)
C=A+B+B;
end

具体的过程生成的库过程,参考(https://blog.csdn.net/qq_45179361/article/details/128098901),然后导入完成。

4.2 页面说明

在这里插入图片描述
点击按钮就会调用matlab代码进行计算,将值输出到计算数值那边,每个按钮按下以后,计算数值会显示出计算结果,按钮后边的label会显示出计算时间,四个按钮的代码如下。

void MainWindow::on_pushButton_clicked()
{
    QTime time;
    QDateTime n=QDateTime::currentDateTime();
    time.start();
    ceshiInitialize();//DLL 初始化
    QString result;
    double para1,para2;
    para1=ui->lineEdit_1->text().toDouble();
    para2=ui->lineEdit_2->text().toDouble();
    mwArray a(1,1,mxDOUBLE_CLASS);
    mwArray b(1,1,mxDOUBLE_CLASS);
    mwArray c(1,1,mxDOUBLE_CLASS);
    a(1,1)=para1;
    b(1,1)=para2;
    int nargout=1;//输出变量个数
    ceshi(nargout,c,a,b);//C=A+B
    result=c.ToString();
    ui->label->setText(result);
    QDateTime now = QDateTime::currentDateTime();
    QString s = QString(tr("%1")).arg(time.elapsed());
    ui->label_2->setText(s);
}

void MainWindow::on_pushButton_2_clicked()
{
    QTime time;
    QDateTime n=QDateTime::currentDateTime();
    time.start();
    ceshiInitialize(); //DLL 初始化
    QString result;
    double para1,para2;
    para1=ui->lineEdit_1->text().toDouble();
    para2=ui->lineEdit_2->text().toDouble();
    mwArray a(1,1,mxDOUBLE_CLASS);
    mwArray b(1,1,mxDOUBLE_CLASS);
    mwArray c(1,1,mxDOUBLE_CLASS);
    a(1,1)=para1;
    b(1,1)=para2;
    int nargout=1;//输出变量个数
    ceshi(nargout,c,a,b);//C=A+B
    result=c.ToString();
    ui->label->setText(result);
    QDateTime now = QDateTime::currentDateTime();
    QString s = QString(tr("%1")).arg(time.elapsed());
    ui->label_3->setText(s);
}

void MainWindow::on_pushButton_3_clicked()
{
    QTime time;
    time.start();
    QDateTime n=QDateTime::currentDateTime();
    ceshi2Initialize();//DLL 初始化
    QString result;
    double para1,para2;
    para1=ui->lineEdit_1->text().toDouble();
    para2=ui->lineEdit_2->text().toDouble();
    mwArray a(1,1,mxDOUBLE_CLASS);
    mwArray b(1,1,mxDOUBLE_CLASS);
    mwArray c(1,1,mxDOUBLE_CLASS);
    a(1,1)=para1;
    b(1,1)=para2;
    int nargout=1;//输出变量个数
    ceshi2(nargout,c,a,b);//C=A+B
    result=c.ToString();
    ui->label->setText(result);
    QDateTime now = QDateTime::currentDateTime();
    QString s = QString(tr("%1")).arg(time.elapsed());
    ui->label_4->setText(s);
}

void MainWindow::on_pushButton_4_clicked()
{
    QTime time;
    time.start();
    QDateTime n=QDateTime::currentDateTime();
    ceshi3Initialize(); //DLL 初始化
    QString result;
    double para1,para2;
    para1=ui->lineEdit_1->text().toDouble();
    para2=ui->lineEdit_2->text().toDouble();
    mwArray a(1,1,mxDOUBLE_CLASS);
    mwArray b(1,1,mxDOUBLE_CLASS);
    mwArray c(1,1,mxDOUBLE_CLASS);
    a(1,1)=para1;
    b(1,1)=para2;
    int nargout=1;//输出变量个数
    ceshi3(nargout,c,a,b);//C=A+B
    result=c.ToString();
    ui->label->setText(result);
    QDateTime now = QDateTime::currentDateTime();
    QString s = QString(tr("%1")).arg(time.elapsed());
    ui->label_5->setText(s);
}

4.3 测试过程以及结果分析

第一轮,从上往下点按钮,结果如图,
调用同一个matlab程序的话,第一次接近两秒,第二次为0,ceshi1完事后,调用ceshi2以及ceshi3可以发现ceshi2和ceshi3用时基本相同。
在这里插入图片描述
第二轮,从下往上点按钮,结果如图
在这里插入图片描述
发现调用ceshi3程序也是接近两秒,随后ceshi2以及ceshi1的调用也是0.3秒多,很接近,然后最后调用cheshi1,时间就很短了。
结果(个人理解):
程序在调用matlab程序是需要按.pro文件中的路径进行寻找,先去找matlab的环境,然后再去找要运行的matlab程序,运行第一个程序后,对于后边的matlab程序来说,环境已经是找到的,只需要找程序就可以了,对于已经运行过一次的程序,环境和路径都是知道的就很快了。

4.4 处理办法

第一个按钮,执行thread_1Initialize();,就是给matlab程序初始化,第二个是初始化时间和程序运行时间,第二个就不会初始化了
在这里插入图片描述
第二次是直接初始化加运行,两次情况,初始化时间没啥规律,只是第二次情况相比第一次而言,运行时间会差0.003秒(测试多次),忽略不计。
在这里插入图片描述

五.参考

Qt测算程序运行时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值