当前位置: 首页 > wzjs >正文

企业网站建设运营山西疫情最新情况

企业网站建设运营,山西疫情最新情况,怎样做外贸,福建省城乡和建设厅网站Qt 线程等待条件 概念 Qt提供了QWaitCondition类实现“等待条件”式的线程控制方法,它让线程阻塞在等待条件的地方,直到条件满足后才继续执行下去。也就是说,QWaitCondition可以使一个线程在满足一定条件时通知其他多个线程,使它…

Qt 线程等待条件

概念

  Qt提供了QWaitCondition类实现“等待条件”式的线程控制方法,它让线程阻塞在等待条件的地方,直到条件满足后才继续执行下去。也就是说,QWaitCondition可以使一个线程在满足一定条件时通知其他多个线程,使它们及时作出响应。
  QWaitCondition类成员函数

函数名称函数描述
QWaitCondition()构造并初始化对象
wai()解锁互斥量,并阻塞等待唤醒条件
wakeAll()唤醒所有处于等待状态的线程,线程唤醒的顺序不确定,由操作系统的调度策略决定
wakeOne()唤醒一个处于等待状态的线程,唤醒哪个线程不确定,由操作系统的调度策略决定
notify_all()相当于wakeAll().此函数兼容STL
notify_one()相当于wakeOne().此函数兼容STL

程序示例

读取线程启动进入等待唤醒状态,当写入数据线程写入数据完成后唤醒所有读取线程,读取线程再继续执行;

// 公共数据和锁&等待唤醒对象
class TestData
{
public:static int sm_nSharedNumber;static QReadWriteLock sm_ReadWriteLock;static QWaitCondition sm_WaitCondition;
};int TestData::sm_nSharedNumber = 10;
QReadWriteLock TestData::sm_ReadWriteLock;
QWaitCondition TestData::sm_WaitCondition;// 写入数据线程
class WorkThread2 : public QThread
{Q_OBJECT
public:explicit WorkThread2(QObject *parent = nullptr);~WorkThread2() = default;protected:void run() override;
};WorkThread2::WorkThread2(QObject *parent) : QThread(parent)
{}void WorkThread2::run()
{TestData::sm_ReadWriteLock.lockForWrite();TestData::sm_nSharedNumber += 5;TestData::sm_nSharedNumber *= 10;qDebug() << QString::fromLocal8Bit("write1 ----- 线程2 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;qDebug() << QString::fromLocal8Bit("write2 ----- 线程2 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;qDebug() << QString::fromLocal8Bit("write3 ----- 线程2 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;TestData::sm_WaitCondition.wakeAll();TestData::sm_ReadWriteLock.unlock();
}// 读取数据线程
class WorkThread1 : public QThread
{Q_OBJECT
public:explicit WorkThread1(QObject *parent = nullptr);~WorkThread1() = default;protected:void run() override;};WorkThread1::WorkThread1(QObject *parent) : QThread(parent)
{}void WorkThread1::run()
{TestData::sm_ReadWriteLock.lockForRead();// 先解锁 QReadWriteLock ,其他线程可以使用 QReadWriteLockTestData::sm_WaitCondition.wait(&TestData::sm_ReadWriteLock);qDebug() << QString::fromLocal8Bit("read1 ----- 线程1 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;msleep(10);qDebug() << QString::fromLocal8Bit("read2 ----- 线程1 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;msleep(20);qDebug() << QString::fromLocal8Bit("read3 ----- 线程1 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;TestData::sm_ReadWriteLock.unlock();
}// 测试函数
void Test()
{unique_ptr<WorkThread1> upThread11 = std::make_unique<WorkThread1>();unique_ptr<WorkThread1> upThread12 = std::make_unique<WorkThread1>();unique_ptr<WorkThread1> upThread13 = std::make_unique<WorkThread1>();unique_ptr<WorkThread2> upThread2 = std::make_unique<WorkThread2>();// 先启动读取函数,让函数处在等待阻塞状态upThread11->start();upThread12->start();upThread13->start();QThread::msleep(10);upThread2->start();upThread11->wait();upThread12->wait();upThread13->wait();upThread2->wait();qDebug() << "Over!";
}
http://www.dtcms.com/wzjs/296983.html

相关文章:

  • 有女人和马做网站吗上海百度推广优化排名
  • 中国协会网站建设方案网络营销和网络推广
  • 奉贤做网站谷歌seo排名优化
  • 智慧团建网站pc端螺蛳粉营销策划方案
  • 主流的网站开发工具网站运营策划书范文
  • 网站图片移动怎么做软文优化
  • 好的做网站公司网络营销渠道策略有哪些
  • 做交友网站成本种子搜索引擎在线
  • 什么网站可以做家禽交易cdq百度指数
  • 网站建设的大作业代码网站关键词全国各地的排名情况
  • 个人网站整站源码下载网站竞价推广怎么做
  • 网站做地区定位跳转网站搜索优化公司
  • 中小企业网络客户服务存在的问题高州网站seo
  • dede做电影网站谷歌浏览器网页版入口在哪里
  • 免费的开源网站百度推广关键词规划师
  • 广州市公司网站建设品牌打开网站搜索
  • 北京网站的建设如何建立网站 个人
  • 西域数码网站建设网站建设的六个步骤
  • 专做西餐的网站引流最好的推广方法
  • 网站建设和美工中国今日新闻
  • 新开最好的传奇网站搜索引擎营销的简称是
  • 如何做自适应网站美工培训
  • 萧山工程建设有限公司网站深圳外贸网络推广
  • 如何做网页或网站seo推广需要多少钱
  • 网站开发 岗位及职责投广告的平台有哪些
  • wordpress 加备案号宁波seo网络推广主要作用
  • 电子商务公司经营范围有哪些杭州seo按天计费
  • 网站建设实训设计思想买链接
  • 灰色调网站怎样开网站
  • 做 ps pr 赚钱的 网站seo伪原创工具