当前位置 博文首页 > fearlazy:Qt多线程第一课QThread

    fearlazy:Qt多线程第一课QThread

    作者:[db:作者] 时间:2021-06-18 12:36

    ?

    文章可能被更新,最新地址:http://www.fearlazy.com/index.php/post/91.html

    ?

    ?

    多线程基本上是每个程序员都会遇到的。在Qt中的界面相关的操作都是在主线程中执行的,如果把一些耗时较长的工作也放到主线程中执行的话就会造成界面的卡死现象。因此我们需要把这些烦人的耗时工作放到子线程中执行,当然啦,如果这些耗时的工作全是UI相关的操作那就另当别论了。

    ????Qt多线程第一课就是QThread,看名字就知道这是个线程类。QThread的使用步骤如下:

    ????1.从QThread中派生一个类作为我们的线程类。

    ? ? 2.重写run()函数。把需要在子线程中执行的工作都放在run函数中。

    ? ? 3.创建线程类对象,并调用start函数。

    ????

    ????举个例子:

    ? ? 1.首先使用QtCreator创建一个基于QWidget的工程。

    ? ? 2.从QThread派生一个类TestThread,并且重写run函数

    blob.png

    ?

    ? ?3.在TestThread的构造函数和run函数中打印出当前所在的线程。

    blob.png

    ?

    ? 4.使用TestThread,在Widget类的构造函数中创建TestThread对象并调用start函数。

    ?blob.png

    ?

    在Widget的构造函数中也打印出了它所在的线程。查看执行结果:

    ?

    Starting F:\07_projectTest\ThreadTest\debug\ThreadTest.exe...

    main thread!: 0x2c08

    TestThread 0x2c08

    TestThread:run: 0x2048

    ?

    从结果可以看出TestThread的构造函数的线程和UI线程是一个线程,run函数在子线程中执行。事实上本例中TestThread的其他函数也是在UI线程中执行的。也就是说所有的耗时操作只能放在run函数中执行才有效果。

    ?

    下一篇:没有了