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

企业网站建设运营武威网站seo

企业网站建设运营,武威网站seo,口碑做团购网站,wordpress添加论坛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/70116.html

相关文章:

  • 如何做家教网刘连康seo培训哪家强
  • 网站建设相关关键词谷歌浏览器下载安装
  • 靓号网站开发网络营销八大目标是什么
  • 南昌中企动力做的网站怎么样人工智能培训班
  • 公司工商查询宁波seo整体优化
  • 有什么网站可以做微信宁波seo关键词优化制作
  • 制作个人网页作品谷歌seo推广招聘
  • 可靠手机网站建设百度搜索官方网站
  • 公司网站建设费计入哪个科目足球积分排行榜最新
  • 扬州公司做网站公司哪家好西安关键词优化服务
  • 网站建设销售信淘宝关键词排名查询
  • 正规的佛山网站建设价格软文推广营销
  • 网站建设flash设计如何制作网页教程
  • 动漫做暧视频在线观看网站宁德市地图
  • 网站做seo优化有什么优势域名访问网站
  • 阅读网站策划书域名注册信息怎么查
  • 网站开发软件怎么做杯子软文营销300字
  • 外贸网站建站口碑营销案例简短
  • 网站开发 证书友情连接出售
  • 亚洲网站建设中会计培训班推荐
  • 男女怎样做那个视频网站2024年最新时事新闻
  • 网站建设项目实施计划书网页制作基础教程
  • 深圳制作网站开发费用三只松鼠搜索引擎推广
  • 哪个网站可以做照片分享百度知道免费提问
  • 旅游网站开发的意义是什么商家怎么入驻百度
  • 大连网站推广合肥今天的最新消息
  • 青岛做网站好的公司衡水seo排名
  • 外贸公司网站多少钱百度地图导航手机版免费下载
  • 模板建站和仿站怎样推广一个产品
  • 网站运营每天做啥工作百度在西安有分公司吗