QT中的多线程

1  QMutex类提供的是线程之间的访问顺序化。

QMutex的目的是保护一个对象、数据结构或者代码段,所以同一时间只有一个线程可以访问它。(在Java术语中,它和同步关键字“synchronized”很相似)。例如,这里有一个方法打印给用户两条消息:

  void someMethod()
{
qDebug("Hello");
qDebug("World");
}

如果同时在两个线程中调用这个方法,结果的顺序将是:

  Hello
Hello
World
World

如果你使用了一个互斥量:

  QMutex mutex;

void someMethod()
{
mutex.lock();
qDebug("Hello");
qDebug("World");
mutex.unlock();
}
然后同一时间只有一个线程可以运行someMethod并且消息的顺序也一直是正确的。Mutex也可以在
线程中使用的时候要保证mutex的定义在线程之外。
2


QThread类提供了与系统无关的线程。

QThread代表在程序中一个单独的线程控制,在多任务操作系统中,它和同一进程中的其它线程共享数据,但运行起来就像一个单独的程序一样。它不是在main()中开始,QThread是在run()中开始运行的。你继承run()并且在其中包含你的代码。例如:

class MyThread : public QThread { public: virtual void run(); }; void MyThread:: run() { for( int count = 0; count < 20; count++ ) { sleep( 1 ); qDebug( "Ping!" ); } } int main() { MyThread a; MyThread b; a. start(); b. start(); a. wait(); b. wait(); }

这将会开始两个线程,每个线程在屏幕上写20次“Ping!”并且退出。在main()的结尾调用wait()是必需的,因为main()的结束会终结整个程序,它会杀掉所有其它线程。当每个MyThread运行到MyThread::run()结尾时,它就结束运行,就好像一个应用程序离开main()时所做的一样。

    在这里要注意a.wait(),b.wait()的使用,他等待线程函数run()执行完毕后,退出主函数。否则在a.start()后还没有等到run函数执行,就退出主函数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值