Qt第十七章 多线程

多线程

1. 线程概念的起源

  • 单核CPU
    早期还没有线程的概念,如何保证2个进程同时进行呢?时间片轮转调度
    每次被CPU选中来执行当前进程所用的时间,时间一到,无论进程是否运行结束,操作系统都会强制将CPU这个资源转到另一个进程去执行。
  • 多核CPU
    随着运行的进程越来越多,人们发现进程的创建、撤销与切换存在着较大的时空开销,因此业界急需一种轻型的进程技术来减少开销。于是上世纪80年代出现了一种叫SMP的对称多处理技术,就是我们所知的线程概念。
    线程切换的开销要小很多,这是因为每个进程都有属于自己的一个完整虚拟地址空间,而线程隶属于某一个进程,与进程内的其他线程一起共享这片地址空间,基本上就可以利用进程所拥有的资源而无需调用新的资源,故对它的调度所付出的开销就会小很多。

2. 三种方式创建线程

  1. 线程入口函数
  • 全局函数
#include <QThread>
void helloThread()
{
   
    for (int i = 0; i < 99999999; ++i) {
   
        qDebug() << "hello";
    }
}

int main(int argc, char* argv[])
{
   
    QApplication a(argc, argv);
    QThread* th1 = QThread::create(helloThread);
    th1->start();
    return a.exec();
}
void helloThread(QString s)
{
   
    for (int i = 0; i < 99999999; ++i) {
   
        qDebug() << "hello" << s;
    }
}

int main(int argc, char* argv[])
{
   
    QApplication a(argc, argv);
    QThread* th1 = QThread::create(helloThread, "thread1");
    th1->start();
    return a.exec();
}

  • 静态成员函数
class A {
   
public:
    A() {
    }
    static void print()
    {
   
        for (int i = 0; i < 10; i++)
            qDebug() << __FUNCTION__;
    }
};

int main(int argc, char* argv[])
{
   
    QApplication a(argc, argv);
    QThread* th1 = QThread::create(A::print);
    th1->start();
    return a.exec();
}
  • 成员函数
class A {
   
public:
    A() {
    }
    void print()
    {
   
        for (int i = 0; i < 10; i++)
            qDebug() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yerennuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值