Qt多线程(一)
在多线程应用程序中,图形用户界面运行于它自己的线程中,而另外的事件处理则会发生在一个或多个其它线程中。这样做之后,即使在处理那些数据密集的事件时,应用程序也能对图形用户界面保持响应。当在一个单处理器上运行时,多线程应用程序可能会比实现同样功能的单线程应用程序运行得更慢一些,无法体现出其优势。但是在目前多处理器系统越来越普及的情况下,多线程应用程序可以在不同的处理器中同时执行多个线程,从而获得更好的总体性能。Qt给程序员提供了实现多线程的模块,程序员可以使用两种方式创建多线程应用程序。
Qt创建多线程应用程序的一种方法如下:
1)首先实例化QThread类,并重写QThread的虚函数run();代码如下:
//myThread.h
class myThread : public QThread { Q_OBJECT public: explicit myThread(QObject *parent = 0);protected: void run(); };
//myThread.cpp
myThread::myThread(QObject *parent) : QThread(parent) { } void myThread::run() { qDebug()<<"子线程 id="<<QThread::currentThread(); //打印子线程ID }
在myThread类中,只有run()函数是线程执行函数,其它定义函数都不是线程执行函数。通过线程ID可以测试。
2)主线程中使用myThread类,启动子线程;
//主线程.h文件 #include "mythread.h" private: myThread* thread; myThread* thread1;
//主线程.cpp文件 ThreadTest::ThreadTest(QWidget *parent) : QWidget(parent), ui(new Ui::ThreadTest) { ui->setupUi(this); thread = new myThread(this); thread1 = new myThread(this); qDebug()<<"主线程 id="<<QThread::currentThread(); thread->start(); thread1->start(); }
使用start()函数启动子线程。运行输出:
通过打印出的两个子线程的id和主线程id说明子线程启动成功。
扫描二维码关注公众号,回复:
5342559 查看本文章
3)子线程的关闭
通过处理窗口关闭的信号调用quit()函数关闭子线程;
thread->quit();
thread1->quit();