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

做网站价格需要多少钱免费推广有哪些

做网站价格需要多少钱,免费推广有哪些,昌平企业网站建设,购物网站 建设 费用文章目录 条件变量使用 wakeOne()使用 wakeAll() 条件变量 QT的条件变量类是QWaitCondition,有wakeOne() 和 wakeAll() 两个方法 wakeOne():仅唤醒一个等待的线程。wakeAll():唤醒所有等待的线程。 使用 wakeOne() https://github.com/Bi…

文章目录

  • 条件变量
    • 使用 wakeOne()
    • 使用 wakeAll()

条件变量

QT的条件变量类是QWaitCondition,有wakeOne()wakeAll() 两个方法

  • wakeOne():仅唤醒一个等待的线程。
  • wakeAll():唤醒所有等待的线程。

使用 wakeOne()

https://github.com/BinaryAI-1024/QtStudy/tree/master/thread/conditionVariable

有 3 个工作线程 在 QWaitCondition 上等待,wakeOne() 只唤醒其中一个线程。

// main.cpp
#include <QCoreApplication>
#include <QThread>
#include <QTimer>
#include "myworker.h"int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);const int numThreads = 3;QThread* threads[numThreads];MyWorker* workers[numThreads];for (int i = 0; i < numThreads; ++i) {threads[i] = new QThread();workers[i] = new MyWorker();workers[i]->moveToThread(threads[i]);// 线程启动时,工作对象执行 doWork()QObject::connect(threads[i], &QThread::started, workers[i], &MyWorker::doWork);// 任务完成后退出线程的事件循环QObject::connect(workers[i], &MyWorker::finished, threads[i], &QThread::quit);// 任务完成后删除工作对象QObject::connect(workers[i], &MyWorker::finished, workers[i], &QObject::deleteLater);// 线程退出后删除线程对象QObject::connect(threads[i], &QThread::finished, threads[i], &QObject::deleteLater);threads[i]->start();}// 2 秒后唤醒所有线程QTimer::singleShot(2000, [=]() {workers[0]->startWork();  // 让所有 worker 线程醒来});return app.exec();
}
// myworker.h
#ifndef MYWORKER_H
#define MYWORKER_H#include <QObject>
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <QDebug>class MyWorker : public QObject {Q_OBJECT
public:explicit MyWorker(QObject *parent = nullptr);~MyWorker();
signals:void finished();
public slots:void doWork();void startWork();private:QMutex mutex;              // 每个实例都有一个互斥锁QWaitCondition condition;  // 每个实例都有一个条件变量bool ready = false;        // 每个实例都有一个标志变量
};#endif // MYWORKER_H
// myworker.cpp
#include "myworker.h"MyWorker::MyWorker(QObject *parent) : QObject(parent) {}MyWorker::~MyWorker() {qDebug() << QThread::currentThread() << "Worker destroyed";
}void MyWorker::doWork() {qDebug() << QThread::currentThread() << "Worker waiting...";{QMutexLocker locker(&mutex);  // 加锁while (!ready) {  // 等待被唤醒condition.wait(&mutex);}}qDebug() << QThread::currentThread() << "Worker processing...";QThread::msleep(2000);qDebug() << QThread::currentThread() << "Worker finished!";emit finished();
}void MyWorker::startWork() {QMutexLocker locker(&mutex);ready = true;condition.wakeOne();  // 仅唤醒一个线程
}

运行结果

QThread(0x1481b00) Worker waiting...
QThread(0x1487b10) Worker waiting...
QThread(0x1487d58) Worker waiting...
QThread(0x1481b00) Worker processing...
QThread(0x1481b00) Worker finished!
QThread(0x1481b00) Worker destroyed

使用 wakeAll()

https://github.com/BinaryAI-1024/QtStudy/tree/master/thread/conditionVariableAll
有 3 个工作线程在 QWaitCondition 上等待,wakeAll() 同时唤醒所有线程。这需要将QMutexQWaitConditionready 声明为静态变量,在多个 MyWorker实例间共享。

// main.cpp
#include <QCoreApplication>
#include <QThread>
#include <QTimer>
#include "myworker.h"int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);const int numThreads = 3;QThread* threads[numThreads];MyWorker* workers[numThreads];for (int i = 0; i < numThreads; ++i) {threads[i] = new QThread();workers[i] = new MyWorker();workers[i]->moveToThread(threads[i]);// 线程启动时,工作对象执行 doWork()QObject::connect(threads[i], &QThread::started, workers[i], &MyWorker::doWork);// 任务完成后退出线程的事件循环QObject::connect(workers[i], &MyWorker::finished, threads[i], &QThread::quit);// 任务完成后删除工作对象QObject::connect(workers[i], &MyWorker::finished, workers[i], &QObject::deleteLater);// 线程退出后删除线程对象QObject::connect(threads[i], &QThread::finished, threads[i], &QObject::deleteLater);threads[i]->start();}// 2 秒后唤醒所有线程QTimer::singleShot(2000, [=]() {workers[0]->startWork();  // 让所有 worker 线程醒来});return app.exec();
}
// myworker.h
#ifndef MYWORKER_H
#define MYWORKER_H#include <QObject>
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <QDebug>class MyWorker : public QObject {Q_OBJECT
public:explicit MyWorker(QObject *parent = nullptr);~MyWorker();
signals:void finished();
public slots:void doWork();void startWork();private:static QMutex mutex;  // 互斥锁(多个 MyWorker 共享)static QWaitCondition condition;  // 等待条件(多个 MyWorker 共享)static bool ready;  // 共享的标志变量
};#endif // MYWORKER_H
// myworker.cpp
#include "myworker.h"
#include <QMutexLocker>
// 共享变量初始化
QMutex MyWorker::mutex;
QWaitCondition MyWorker::condition;
bool MyWorker::ready = false;MyWorker::MyWorker(QObject *parent) : QObject(parent) {}MyWorker::~MyWorker() {qDebug() << QThread::currentThread() << "Worker destroyed";
}void MyWorker::doWork() {qDebug() << QThread::currentThread() << "Worker waiting...";{QMutexLocker locker(&mutex);  // 加锁while (!ready) {  // 等待被唤醒condition.wait(&mutex);}}qDebug() << QThread::currentThread() << "Worker processing...";QThread::msleep(2000);qDebug() << QThread::currentThread() << "Worker finished!";emit finished();
}void MyWorker::startWork() {QMutexLocker locker(&mutex);ready = true;condition.wakeAll();  // 唤醒所有等待的线程
}

运行结果

QThread(0xa9f1b00) Worker waiting...
QThread(0xa9f7fd8) Worker waiting...
QThread(0xa9f80d0) Worker waiting...
QThread(0xa9f1b00) Worker processing...
QThread(0xa9f80d0) Worker processing...
QThread(0xa9f7fd8) Worker processing...
QThread(0xa9f1b00) Worker finished!
QThread(0xa9f80d0) Worker finished!
QThread(0xa9f7fd8) Worker finished!
QThread(0xa9f1b00) Worker destroyed
QThread(0xa9f7fd8) Worker destroyed
QThread(0xa9f80d0) Worker destroyed
http://www.dtcms.com/wzjs/143450.html

相关文章:

  • 上海网站设计服务商刷排名seo
  • 爱站seo查询软件深圳市网络营销推广服务公司
  • 哪些网站可以做商家搜狗整站优化
  • 大发快三网站自做沈阳网站seo排名公司
  • 想学习网站建设品牌运营策划
  • 网站怎样做漂浮深圳推广公司推荐
  • 自己做博客网站如何在百度上添加自己的店铺
  • java网站建设兼职南宁排名seo公司
  • 电商网站的功能有哪些seo教程搜索引擎优化
  • wordpress admin南京seo优化培训
  • 帝国cms做下载网站百度查一下
  • 给网站做推广快速排名生客seo
  • 什么是网站版面布局手机网站自助建站系统
  • 114查询seo关键词查询工具
  • 网页设计班级网站怎么做国家认可的教育培训机构
  • 手机电脑同步wordpress厦门网站综合优化贵吗
  • 莱芜论坛二手车seo快速排名软件品牌
  • 永康物流网站百度sem是什么
  • 网站建设优化网站排名百度灰色关键词排名代做
  • 有没有帮忙做推广的网站网站广告投放价格表
  • 正规网站模板设计图百度官方
  • 做网站app怎么赚钱个人如何注册网站
  • 广州做网站海珠信科网站建设的基本流程
  • 雄安个人代做网站排名百度怎么进入官方网站
  • 北京做网站定制价格chrome下载
  • 网站 内页模板之家
  • 做购物类网站有哪些软文写作的十大技巧
  • 网站建设方案书要怎么样写最新新闻消息
  • 上海seo公司bwyseo怎么做网站关键词优化
  • 宁夏做网站的公司全网营销推广方案