QT——QWaitCondition


它为同步线程提供了一个条件变量。

加入头文件:

#include <QWaitCondition>

函数:

virtual  ~QWaitCondition  ()
bool  wait (QMutex  mutex,unsigned  long  time = ULONG_MAX)
1) 释放锁定的mutex

 2) 在线程对象上等待

mutex必须由调用线程进行初锁定 。注意调用wait的话,会自动调用unlock解锁之前锁住的资源,不然会造成死锁。

线程1等待线程2来改变共享资源,从而达到一定的条件然后发出信号,使得线程1从wait中的阻塞状态中被唤醒。

但是线程2想改变资源,却无法办到,因为线程1调用lock之后就在wait中blocking,了但是没有及时的unlock,那么这就

构成了死锁的条件。所以说wait函数除了使调用线程切换到内核态之外,还自动unlock(&mutex)

void  wakeOne ()
  • 这将会唤醒所有等待QWaitCondition的线程。这些线程被唤醒的顺序依赖于操组系统的调度策略,并且不能被控制或预知。

void wakeAll ()

这将会唤醒所有等待QWaitCondition的线程中的一个线程。这个被唤醒的线程依赖于操组系统的调度策略,并且不能被控制或预知。

 

例子:

#include<QtCore/QCoreApplication>
#include <QMutex>
#include <QWaitCondition>
#include <QThread>
QWaitCondition mycond;
class mythread:public QThread
{
 Q_OBJECT
public:
 mythread(QObject * parent);
 ~mythread();

 void run(); 
private:
 int count;
 QMutex mutex;

};
mythread::mythread(QObject *parent)
: QThread(parent)
{

}

mythread::~mythread()
{

}

void mythread::run()
{
 mutex.lock();
 mycond.wait(&mutex);
 count++;
 mutex.unlock();
 //do some things
 mutex.lock();
 count--;
 mutex.unlock();
}
int main(int argc, char *argv[])
{
 QCoreApplication a(argc, argv);
 mythread *th=new mythread(0);
 th->start();
 th->wait();
 QChar ch=getchar();
 if (ch=='a')
 {
  mycond.wakeAll();
 }
 return a.exec();
}

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值