1.回顾linux多线程
pthread_create( 函数指针); //通过函数指针,指明你这个线程需要完成的任务
2.QT中多线程的使用
原理:当你调用start方法开启一个线程的时候,run方法会被自动调用
第一步:创建一个子类继承QThread,然后重写QThread中的run()方法
virtual void QThread::run() //虚函数,线程的任务函数,创建线程需要完成的任务就靠它来实现
如何在QT工程中新增一个C++类
右键点击工程名--》add new--》选择C++--》C++类
第二步:创建子类对象,启动线程
void QThread::start();3.常用方法
(1)延时
[static] void QThread::sleep(unsigned long secs) //单位秒
[static] void QThread::msleep(unsigned long msecs) //毫秒
[static] void QThread::usleep(unsigned long usecs) //微秒
(2)终止线程
void QThread::terminate()
(3)回收线程
bool QThread::wait(unsigned long time = ULONG_MAX) //参数是超时时间#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } //启动线程 void MainWindow::on_pushButton_clicked() { thread.start(); } //关闭线程 void MainWindow::on_pushButton_2_clicked() { thread.terminate(); } ----------------------------- ------------------------------ #include "mythread.h" #include <QDebug> mythread::mythread() : QThread() { } void mythread::run() { while(1) { qDebug()<<"hello "; QThread::sleep(1); } }
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//把主界面中的标签当成参数传递给mythread这个类
thread.getattr(ui->label);
}
MainWindow::~MainWindow()
{
delete ui;
}
//启动线程
void MainWindow::on_pushButton_clicked()
{
thread.start();
}
//关闭线程
void MainWindow::on_pushButton_2_clicked()
{
thread.terminate();
}
-----------------------------------------
--------------------------------------------
#include "mythread.h"
#include <QDebug>
mythread::mythread() : QThread()
{
//把要显示的图片存放到容器中
piclist.push_back("C:/Users/PC/Desktop/share/1.jpg");
piclist.push_back("C:/Users/PC/Desktop/share/2.jpg");
piclist.push_back("C:/Users/PC/Desktop/share/3.jpg");
piclist.push_back("C:/Users/PC/Desktop/share/4.jpg");
piclist.push_back("C:/Users/PC/Desktop/share/5.jpg");
i=0;
}
void mythread::run()
{
while(1)
{
QPixmap map(piclist.at(i));
//调整图片大小
map.scaled(mylb->width(),mylb->height());
//配置生效
mylb->setScaledContents(true);
//每隔一秒钟在标签上切换显示不同的图片
mylb->setPixmap(map);
QThread::sleep(1);
if(i<4)
i++;
else
i=0;
}
}
void mythread::getattr(QLabel *lb)
{
mylb=lb;
}