Qt线程类 Qt 包含下面一些线程相关的类: QThread 提供了开始一个新线程的方法 QThreadStorage 提供逐线程数据存储 QMutex 提供相互排斥的锁,或互斥量 QMutexLocker 是一个便利类,它可以自动对QMutex 加锁与解锁 QReadWriterLock 提供了一个可以同时读操作的锁 QReadLocker 与QWriteLocker 是便利类,它自动对QReadWriteLock 加锁与解锁 QSemaphore 提供了一个整型信号量,是互斥量的泛化 QWaitCondition 提供了一种方法,使得线程可以在被另外线程唤醒之前一直休眠。 Qt线程的创建 Qt 线程中有一个公共的抽象类,所有的线程都是从这个QThread 抽象类中派生的,要实现 QThread 中的纯虚函数run(),run()函数是通过 start()函数来实现调用的。 1 class MyThread : public QThread { 2 public : 3 virtual void run(); 4 }; 5 6 void MyThread::run() 7 { 8 for ( int count = 0 ; count < 20 ; count ++ ) { 9 sleep( 1 ); 10 qDebug( " Ping! " ); 11 } 12 } 13 14 int main() 15 { 16 MyThread a; 17 MyThread b; 18 19 a.start(); // 自动调用 run(),否则即使该线程创建,也是一开始就挂起 20 b.start(); 21 // 要等待线程a,b 都退出 22 a.wait(); 23 b.wait(); 24 } 25 Qt线程同步 1.QMutex QMutex ( bool recursive = FALSE ) virtual ~ QMutex () void lock () //试图锁定互斥量。如果另一个线程已经锁定这个互斥量,那么这次调用将阻塞 直到那个线程把它解锁。 void unlock () bool locked () bool tryLock () //如果另一个进程已经锁定了这个互斥量,这个函数返回假,而不是一直等到这个锁可用为止,比如,它不是阻塞的。 1 // Qt 2 QMutex mutex; 3 void someMethod() 4 { 5 mutex. lock (); 6 qDebug( " Hello " ); 7 qDebug( " World " ); 8 mutex.unlock(); 9 } 10 11 // 用 Java 的术语,这段代码应该是: 12 void someMethod() 13 { 14 synchronized { 15 qDebug( " Hello " ); 16 qDebug( " World " ); 17 } 18 } 不过在Qt 中我们可用通过另一个类来简化这种应用,因为如果使用QMutex.lock()而没有对应的使用QMutex.unlcok()的话就会造成死锁,别的线程永远也得不到接触该mutex 锁住的共享资源的机会。尽管可以不...