非阻塞延迟函数
问题来源
在工作中,使用开源的Openpilot编写的机器人配置工具,调用海康SDK来控制相机变焦调焦时,调焦问题不大,但是在变倍数时,焦距值跟着变化,以前这个缺陷没有处理,我在处理过程中,调试时发现是相机硬件需要时间去刷新这个值,但是从SDK去读取也是非阻塞的,也就是说,这个值在变化中也可读出来。因此,考虑到加入阻塞延时操作,但是今天被同事提醒,在UI线程中不能加入延时。折腾一下午,试了试非阻塞函数,觉得可行性很高,记录于此。
声明: 全部分代码来源于网络
详情可见 :Qt修炼手册11_多线程编程和QThread类
demo
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtWidgets/QWidget>
#include <QThread>
#include <QPushButton>
#include <QMutex>
#include <ui_mainwindow.h>
namespace Ui {
class MainWindow;
}
class MyThread : public QThread
{
Q_OBJECT
public:
MyThread(int num);
private:
bool threadStop;
int number;
QMutex mutex;
public:
void stop();
protected:
void run();
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
MyThread *thread1;
MyThread *thread2;
void NonBlockingMsSleep(int ms);
signals:
void mySignal();
private slots:
void btn_start();
void btn_stop();
void btn_isRunning();
void btn_isFinished();
void on_pushButton_clicked