大型歌舞剧:Qt中的多线程编程

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 18:53:02

Qt中的多线程编程

分类: QT 2010-03-07 22:07 237人阅读 评论(0) 收藏 举报


Qt中的多线程编程

https://www.ibm.com/developerworks/cn/linux/l-qt-mthrd/

QThread 类,该类提供了创建一个新线程以及控制线程运行的各种方法。线程是通过 QThread::run() 重载函数开始执行的

在 Qt 系统中,始终运行着一个GUI 主事件线程,这个主线程从窗口系统中获取事件,并将它们分发到各个组件去处理。在 QThread 类中还有一种从非主事件线程中将事件提交给一个对象的方法,也就是 QThread::postEvent()方法,该方法提供了 Qt 中的一种 Thread-safe 的事件提交过程。提交的事件被放进一个队列中,然后 GUI 主事件线程被唤醒并将此事件发给相应的对象


Qt 还提供了 QMutex 类,一个线程在访问临界数据时,需要加锁,此时其他线程是无法对该临界数据同时加锁的,直到前一个线程释放该临界数据。通过这种方式才能实现对临界数据的原子操作。


当发生特定事件时,QWaitCondition 将唤醒等待该事件的所有线程或者唤醒任意一个被选中的线程。


Qt 系统还提供了一个 QCustomEvent 类,用于用户自定义事件,这些自定义事件可以利用 QThread::postEvent() 或者QApplication::postEvent() 被发给各种控件或其他 QObject 实例,而 QWidget 类的子类可以通过 QWidget::customEvent() 事件处理函数方便地接收到这些自定义的事件。


还可以使用系统中提供的定时器机制来实现类似的功能。定时器机制将并发的事件串行化,简化了对并发事件的处理,从而避免了thread-safe方面问题的出现。


Qt 多线程学习(1)

http://www.diybl.com/course/3_program/c/c_js/20090303/157347.html

一、平台无关的线程类,
二、线程安全的事件投递,
三、跨线程的信号-槽连接。

 

QThread 提供了开始一个新线程的方法
QThreadStorage 提供逐线程数据存储
QMutex 提供相互排斥的锁,或互斥量
QMutexLocker 是一个便利类,它可以自动对QMutex加锁与解锁
QReadWriterLock 提供了一个可以同时读操作的锁
QReadLocker与QWriteLocker 是便利类,它自动对QReadWriteLock加锁与解锁
QSemaphore 提供了一个整型信号量,是互斥量的泛化
QWaitCondition 提供了一种方法,使得线程可以在被另外线程唤醒之前一直休眠。

 

为创建一个线程,子类化QThread并且重写它的run()函数

调用QThread::start()。



Qt多线程学习-用例子来理解多线程

http://www.diybl.com/course/3_program/c/c_js/20090303/157373.html