Qt多线程

来源:互联网 发布:电力行业考试中心软件 编辑:程序博客网 时间:2024/06/07 21:08

今天学习Qt的多线程,在学习多线程主要是两个方面。一是多线程的基础概念,二是多线程的同步,三是怎么和主线程进行通讯。

三.Qt 的应用程序开始执行的时候,只有一个主线程在运行,只有这个主线程是可以创建QApplication或者QCoreApplication的对象,并且可以对创建的对象调用exec()。

在这个主线程上面可以开始由QThread创建的对象的新的线程。这些由QThread创建的对象的新的线程之间的通信,是通过使用含有互斥量,读写锁,信号量或者等待条件的共享变量来实现的。但是运用这些技术没有任何一个是可以用来和主线程进行通信的,因为他们会造成锁住事件循环并且会冻结用户界面。

那么主线程和次线程是怎么通讯的呢?

Qt提供了一个解决的方案,就只在线程之间使用信号-槽的连接,通常情况下,信号和槽函数的同步的,就是一个信号被发射,使用直接函数就可以立刻调用其关联的多个槽。但是也有不同步的情况,不错这个问题可以通过修改QObject::connect()中的第五个参数来改变。

注意点:

①写一个qthread子类,除了run()这个函数是在次线程执行的,其它函数都是在主线程被调用的,因为qthread类就是一个Qobject,它是在主线程创建的,自然它的那些非run()函数以及各种数据成员都属于主线程。