Qt
系统相关
1. 多线程
1.1 Qt多线程介绍
QThread 代表一个在应用程序中可以独立控制的线程,它还可以和进程中的其他线程共享数据。QThread 对象管理程序中的一个控制线程。
1.2 常用函数
函数 / 信号名 | 功能描述 |
---|---|
run() | 线程的入口函数,包含线程执行的代码逻辑 |
start() | 调用 run () 开始执行线程,根据优先级调度,若线程已运行则不做任何事 |
currentThread() | 返回指向管理当前执行线程的 QThread 指针 |
isRunning() | 线程正在运行则返回 true,否则返回 false |
sleep() | 使线程休眠,单位为秒 |
msleep() | 使线程休眠,单位为毫秒 |
usleep() | 使线程休眠,单位为微秒 |
wait() | 阻塞线程,直到关联线程完成执行(从 run () 返回,若已完成或未启动则返回 true)或达到指定时间(超时返回 false,默认 ULONG_MAX 表示永远等待),类似 POSIX pthread_join () 功能 |
terminate() | 终止线程执行,是否立即终止取决于操作系统调度策略,之后建议用 wait () |
finished() | 线程结束时发出此信号,可用于线程清理工作 |
timethread.h
#ifndef TIMETHREAD_H
#define TIMETHREAD_H
#include <QThread>
class TimeThread : public QThread
{
Q_OBJECT
public:
TimeThread();
void run(); //线程任务函数
signals:
void sendTime(QString Time); //声明信号函数
};
#endif // TIMETHREAD_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <timethread.h> //添加头文件
#include <QLabel>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void on_btn_clicked();
void showTime(QString Time);
private:
QLabel* label;
Ui::Widget *ui;
TimeThread t; //定义线程对象
};
#endif // WIDGET_H
timethread.cpp
#include "timethread.h"
#include <QTime>
#include <QDebug>
#include <QString>
TimeThread::TimeThread() {
}
void TimeThread::run()
{
while(1)
{
QString time = QTime::currentTime().toString("hh:mm:ss");
qDebug() << time;
emit sendTime(time); //发送信号
sleep(1);
}
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#in