QTimer在子线程中的简单使用
**碎碎念:**刚开始学习Qt,一开始准备创建一个循环放在子线程中运行,想到了在子线程中使用Qtimer定时器。但是遇到了线程操作相关的问题,导致程序一直报错:定时器不可被其他的线程关闭/注销。
这个问题困扰了我好久,后来仔细看Qt的线程运行机制,在Qt5中,是先创建线程,然后通过信号-槽的机制让函数在子线程中运行起来。
于是写了这个小例子,希望能够帮到一开始有疑惑的朋友。
1.创建子线程的类
QT5中继承于QObject的类,即可放入线程中运行,不需要继承于QThread类。
//写一个dataprocess的类,作用是周期性地向Qmap中插入数据,插入后向主程序发送信号(signal)
//.h文件
#ifndef DATAPROCESS_H
#define DATAPROCESS_H
#include <QObject>
#include<QThread>
#include<QTimer>
class DataProcess:public QObject
{
Q_OBJECT
public:
explicit DataProcess(QObject *parent=nullptr);
signals:
void mapchanged();
public slots:
void DPStart();
void DPStop();
void DPEnd();
void DPHandle();
private:
QTimer *myT;
};
//.cpp文件
#include "dataprocess.h"
#include"globallist.h"
#include<QDebug>
DataProcess::DataProcess(QObject *parent)