您的位置:首页 > 健康 > 养生 > 滨州seo排名_如何制作小程序的详细步骤_百度一下手机版首页_站长是什么级别

滨州seo排名_如何制作小程序的详细步骤_百度一下手机版首页_站长是什么级别

2024/12/25 1:17:52 来源:https://blog.csdn.net/m0_51650696/article/details/143374642  浏览:    关键词:滨州seo排名_如何制作小程序的详细步骤_百度一下手机版首页_站长是什么级别
滨州seo排名_如何制作小程序的详细步骤_百度一下手机版首页_站长是什么级别

问题描述:软件界面打开之前要初始化相机和机械臂,并且在执行扫描点云,配准等操作时,只能单线程运行,导致运行效率低。

解决:使用QThread

首先写一个类如task,成员函数执行的是需要在子线程运行。

task.h: task类需要继承QObject类,startadd()函数内容在子进程运行。

#ifndef TASK_H
#define TASK_H#include <QThread>
#include <QObject>
class task: public QObject
{Q_OBJECTpublic:explicit task(QObject *parent = 0);public slots:void startadd();};#endif // TASK_H

task.cpp:输出线程id,并且隔一秒输出i的值。

#include "task.h"
#include <QDebug>task::task(QObject *parent){}
void task::startadd(){qDebug() << "线程id:" << QThread::currentThreadId();for(int i=0;i<5;i++){qDebug()<<"i的值为: "<< i <<endl;QThread::sleep(1);}
}

mainwindow.h:声明task的对象,并且声明一个线程m_thread,创建一个转到按钮的槽函数,创建信号函数,后面使用emit触发。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "task.h"QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;task *m;QThread * m_thread;signals:void startAddRequest();private slots:void on_pushButton_clicked();};
#endif // MAINWINDOW_H

mainwindow.cpp:

总结:五步曲
1.类的对象,线程

    m= new task;
    m_thread = new QThread;

2.关联信号和槽,运行startAddRequest()时,触发m对象的函数startadd()

   connect(this,SIGNAL(startAddRequest()),m,SLOT(startadd()));

    qDebug() << "主线程id:" << QThread::currentThreadId();

3.将对象移动m到线程m_thread

    m->moveToThread(m_thread);

4.启动线程

    m_thread->start();

5.发出信号

emit startAddRequest();

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);m= new task;m_thread = new QThread;connect(this,SIGNAL(startAddRequest()),m,SLOT(startadd()));qDebug() << "主线程id:" << QThread::currentThreadId();m->moveToThread(m_thread);m_thread->start();}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{qDebug() << "线程id:" << QThread::currentThreadId();emit startAddRequest();}

补充:

sleep() / msleep() / usleep()

使线程休眠,单位为秒 / 毫秒 / 微秒

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com