ROS

C++学习笔记(四) - Qt多线程(1)

2017-03-28  本文已影响1356人  Savior2016

1 QThread 类概述

QThread类为用户管理多线程提供了一种平台无关的途径。

include <QThread>

2 详述

QThread对象在程序内部进行控制线程的管理,QThread起始于run()函数额执行。默认情况下,run()通过调用exec()启动事件循环(event loop),并在线程内部执行Qt 的事件循环。
线程在程序中用途非常广,常常用于避免程序阻塞、分布式计算、多任务协作等功能。
有的朋友为了达到程序不阻塞、提高运行效率等效果喜欢在一个程序中生成几十甚至几百个线程,然而需要注意的是,很多时候线程太多并不能提高效率,如果线程没有休眠或者等待的话,最多同时运行的数量是CPU的核心数量,CPU需要在诸多线程中切换和调度,反而降低了系统效率。而在另一种情况,如果线程大部分时间是等待(如等待某个返回、读取硬盘等),那么数量稍微增多些的确会提高效率。
所以归纳起来:

3 QT中使用多线程

Qt中如何创建使用线程,非常简单,只需要继分为三步:

- 1 创建线程类,继承QThread 
- 2重写run()
- 3主线程中创建线程对象,使用start()方法启动线程。

(1) 首先,新建Qt命令行项目,在项目中创建线程类:

CSimpleThread.h

#ifndef CSIMPLETHREAD_H
#define CSIMPLETHREAD_H
#include <QThread>

class CSimpleThread : public QThread
{
    Q_OBJECT
public:
    CSimpleThread();
};

#endif // CSIMPLETHREAD_H

CSimpleThread.cpp

#include "CSimpleThread.h"
 #include <QDebug>
CSimpleThread::CSimpleThread()
 {

}

(2) 重写run(),每5秒打印一句话

CSimpleThread.h

#ifndef CSIMPLETHREAD_H
#define CSIMPLETHREAD_H
#include <QThread>

class CSimpleThread : public QThread
{
    Q_OBJECT
public:
    CSimpleThread();
    void run();
};

#endif // CSIMPLETHREAD_H

CSimpleThread.cpp

#include "CSimpleThread.h"
#include <QDebug>
CSimpleThread::CSimpleThread()
{

}

void CSimpleThread::run()
{
    while (true) {
        qDebug()<<"CSimpleThread run!";
        sleep(5);
    }
}

(3) 主线程中创建线程对象,使用start()方法启动线程

main.cpp

#include <QCoreApplication>
#include <CSimpleThread.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    CSimpleThread *SThread = new CSimpleThread();
    SThread->start();

    return a.exec();
}

参考文献千荒箭

上一篇 下一篇

猜你喜欢

热点阅读