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

1 QThread 类概述

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

include <QThread>

2 详述

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

  • 以计算为主的运算密集型线程数量理论上只要为CPU核心数量即可,如使用线程计算质数组合解析数据等。
  • 以等待为主的IO密集型线程数量可以按照具体业务规模适当增加线程,如使用线程读写数据库、硬盘、远程接口获取数据等(具体项目中可以增加的线程而不影响运行效率的阀值需要不同项目具体测试得出)

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();
}

参考文献千荒箭

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 1,920评论 0 17
  • 本文选译自《Threading Programming Guide》。 导语 线程技术作为在单个应用程序中并发执行...
    巧巧的二表哥阅读 2,596评论 4 24
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,624评论 19 139
  • 看到喜欢的衣服鞋子总是想买买买, 自从想了这个妙招,就再不用买买买了, 因为我把它们都装进我的画本啦! 比如这样的...
    Arphie阅读 935评论 13 23
  • 喝好一口水 睡好一个觉 吃好一顿饭 在白天 也在夜里 微笑 也好好呼吸 向明媚的阳光 也向不堪与 烂泥 过去已逝 ...
    结绳以记事阅读 221评论 0 0

友情链接更多精彩内容