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

建行门户网站今日重大国际新闻

建行门户网站,今日重大国际新闻,报纸网站建设,特色的佛山网站建设实现思路 QThread 类简介: QThread 是 Qt 中用于多线程编程的基础类。可以通过继承 QThread 并重写 run() 方法来创建自定义的线程逻辑。新线程的执行从 run() 开始,调用 start() 方法启动线程。 掷骰子的多线程应用程序: 创建一个 DiceThre…

实现思路

  1. QThread 类简介
    • QThread 是 Qt 中用于多线程编程的基础类。可以通过继承 QThread 并重写 run() 方法来创建自定义的线程逻辑。
    • 新线程的执行从 run() 开始,调用 start() 方法启动线程。
  2. 掷骰子的多线程应用程序
    • 创建一个 DiceThread 类继承自 QThread,在 run() 方法中模拟掷骰子操作,并通过信号将结果发送出去。
  3. 线程同步
    • 线程同步的概念:确保多个线程之间协调操作,避免数据竞争和不一致性。
    • 基于互斥量的线程同步:使用 QMutex 确保在同一时间只有一个线程可以访问共享资源。
    • 基于读写锁的线程同步:使用 QReadWriteLock,允许多个读线程同时访问资源,但写线程独占资源。
    • 基于条件等待的线程同步:使用 QWaitConditionQMutex 结合,允许线程等待某个条件满足。
    • 基于信号量的线程同步:使用 QSemaphore 控制对资源的访问数量。

代码示例

1. QThread 类简介和掷骰子的多线程应用程序
#include <QtWidgets/QApplication>
#include <QtCore/QThread>
#include <QtCore/QRandomGenerator>
#include <QtCore/QDebug>
#include <QtCore/QMutex>
#include <QtCore/QReadWriteLock>
#include <QtCore/QWaitCondition>
#include <QtCore/QSemaphore>class DiceThread : public QThread {Q_OBJECT
signals:void resultReady(int result);protected:void run() override {while (!isInterruptionRequested()) {int diceValue = QRandomGenerator::global()->bounded(1, 7);emit resultReady(diceValue);msleep(1000);}}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);DiceThread diceThread;QObject::connect(&diceThread, &DiceThread::resultReady, [](int result) {qDebug() << "Dice result: " << result;});diceThread.start();// 运行一段时间后停止线程QThread::sleep(10);diceThread.requestInterruption();diceThread.wait();return app.exec();
}#include "main.moc"
2. 基于互斥量的线程同步
#include <QtWidgets/QApplication>
#include <QtCore/QThread>
#include <QtCore/QRandomGenerator>
#include <QtCore/QDebug>
#include <QtCore/QMutex>class SharedData {
public:int value = 0;QMutex mutex;
};class IncrementThread : public QThread {
public:IncrementThread(SharedData *data) : data(data) {}protected:void run() override {for (int i = 0; i < 1000; ++i) {data->mutex.lock();++data->value;data->mutex.unlock();msleep(1);}}private:SharedData *data;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);SharedData sharedData;IncrementThread thread1(&sharedData);IncrementThread thread2(&sharedData);thread1.start();thread2.start();thread1.wait();thread2.wait();qDebug() << "Final value: " << sharedData.value;return app.exec();
}#include "main.moc"
3. 基于读写锁的线程同步
#include <QtWidgets/QApplication>
#include <QtCore/QThread>
#include <QtCore/QRandomGenerator>
#include <QtCore/QDebug>
#include <QtCore/QReadWriteLock>class SharedData {
public:int value = 0;QReadWriteLock lock;
};class ReadThread : public QThread {
public:ReadThread(SharedData *data) : data(data) {}protected:void run() override {for (int i = 0; i < 1000; ++i) {data->lock.lockForRead();qDebug() << "Read value: " << data->value;data->lock.unlock();msleep(1);}}private:SharedData *data;
};class WriteThread : public QThread {
public:WriteThread(SharedData *data) : data(data) {}protected:void run() override {for (int i = 0; i < 100; ++i) {data->lock.lockForWrite();++data->value;data->lock.unlock();msleep(10);}}private:SharedData *data;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);SharedData sharedData;ReadThread reader1(&sharedData);ReadThread reader2(&sharedData);WriteThread writer(&sharedData);reader1.start();reader2.start();writer.start();reader1.wait();reader2.wait();writer.wait();qDebug() << "Final value: " << sharedData.value;return app.exec();
}#include "main.moc"

在这里插入图片描述

4. 基于条件等待的线程同步
#include <QtWidgets/QApplication>
#include <QtCore/QThread>
#include <QtCore/QRandomGenerator>
#include <QtCore/QDebug>
#include <QtCore/QMutex>
#include <QtCore/QWaitCondition>class SharedData {
public:int value = 0;QMutex mutex;QWaitCondition condition;bool ready = false;
};class ProducerThread : public QThread {
public:ProducerThread(SharedData *data) : data(data) {}protected:void run() override {QRandomGenerator gen;for (int i = 0; i < 10; ++i) {QThread::msleep(1000);data->mutex.lock();data->value = gen.bounded(1, 100);data->ready = true;data->condition.wakeOne();data->mutex.unlock();}}private:SharedData *data;
};class ConsumerThread : public QThread {
public:ConsumerThread(SharedData *data) : data(data) {}protected:void run() override {while (true) {data->mutex.lock();if (!data->ready) {data->condition.wait(&data->mutex);}qDebug() << "Consumed value: " << data->value;data->ready = false;data->mutex.unlock();}}private:SharedData *data;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);SharedData sharedData;ProducerThread producer(&sharedData);ConsumerThread consumer(&sharedData);consumer.start();producer.start();return app.exec();
}#include "main.moc"
5. 基于信号量的线程同步
#include <QtWidgets/QApplication>
#include <QtCore/QThread>
#include <QtCore/QRandomGenerator>
#include <QtCore/QDebug>
#include <QtCore/QSemaphore>class SharedResource {
public:QSemaphore semaphore;void useResource() {semaphore.acquire();qDebug() << "Using resource...";QThread::msleep(100);semaphore.release();}
};class UserThread : public QThread {
public:UserThread(SharedResource *resource) : resource(resource) {}protected:void run() override {for (int i = 0; i < 10; ++i) {resource->useResource();}}private:SharedResource *resource;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);SharedResource resource;resource.semaphore.release(3);UserThread thread1(&resource);UserThread thread2(&resource);UserThread thread3(&resource);thread1.start();thread2.start();thread3.start();thread1.wait();thread2.wait();thread3.wait();return app.exec();
}#include "main.moc"

代码解释

1. QThread 类简介和掷骰子的多线程应用程序
  • DiceThread 类
    • 继承 QThread 并在 run() 中模拟掷骰子操作,使用 QRandomGenerator 生成 1 到 6 的随机数。
    • 通过 resultReady 信号将结果发送出去,在主线程中连接该信号并打印结果。
2. 基于互斥量的线程同步
  • SharedData 类
    • 包含一个 value 变量和 QMutex
  • IncrementThread 类
    • 每次循环对 value 加 1 前先加锁,加 1 后解锁,确保同一时间只有一个线程修改 value
3. 基于读写锁的线程同步
  • SharedData 类
    • 包含一个 value 变量和 QReadWriteLock
  • ReadThread 类
    • 读线程使用 lockForRead() 锁定,读取 value 后解锁。
  • WriteThread 类
    • 写线程使用 lockForWrite() 锁定,修改 value 后解锁,写线程独占资源,读线程可同时读。
4. 基于条件等待的线程同步
  • SharedData 类
    • 包含 valueQMutexQWaitConditionready 标志。
  • ProducerThread 类
    • 生产者线程生成数据,使用 wakeOne() 唤醒等待的消费者。
  • ConsumerThread 类
    • 消费者线程等待 ready 标志,使用 wait() 等待,一旦有数据可用,打印并重置 ready
5. 基于信号量的线程同步
  • SharedResource 类
    • 包含 QSemaphore,初始释放 3 个资源。
  • UserThread 类
    • 每次使用资源前先 acquire() 资源,使用后 release() 资源,确保最多 3 个线程同时使用资源。

使用说明

  • 对于每个示例,将代码保存为 main.cpp 文件。
  • 确保 .pro 文件包含 QT += core widgets 以及 CONFIG += c++11
  • 编译并运行程序,观察不同线程同步机制的效果。

在这里插入图片描述


文章转载自:
http://radiotelegram.Ljqd.cn
http://gandhiism.Ljqd.cn
http://zeitgeist.Ljqd.cn
http://grandchildren.Ljqd.cn
http://apog.Ljqd.cn
http://boobery.Ljqd.cn
http://strikebreaking.Ljqd.cn
http://metamer.Ljqd.cn
http://radiochemical.Ljqd.cn
http://chez.Ljqd.cn
http://postirradiation.Ljqd.cn
http://zi.Ljqd.cn
http://lamentoso.Ljqd.cn
http://humanly.Ljqd.cn
http://enlightenment.Ljqd.cn
http://hydel.Ljqd.cn
http://hyperleucocytosis.Ljqd.cn
http://eigenvalue.Ljqd.cn
http://unseasonable.Ljqd.cn
http://pew.Ljqd.cn
http://hippological.Ljqd.cn
http://ylem.Ljqd.cn
http://gneissic.Ljqd.cn
http://construct.Ljqd.cn
http://cpi.Ljqd.cn
http://tamar.Ljqd.cn
http://ploughboy.Ljqd.cn
http://joro.Ljqd.cn
http://ahermatype.Ljqd.cn
http://yawing.Ljqd.cn
http://sumptuousness.Ljqd.cn
http://diascope.Ljqd.cn
http://neuropathologic.Ljqd.cn
http://mangey.Ljqd.cn
http://liprouge.Ljqd.cn
http://tedium.Ljqd.cn
http://dunedin.Ljqd.cn
http://spoony.Ljqd.cn
http://staminode.Ljqd.cn
http://marmot.Ljqd.cn
http://algernon.Ljqd.cn
http://restricted.Ljqd.cn
http://unladen.Ljqd.cn
http://decoration.Ljqd.cn
http://seasat.Ljqd.cn
http://tonicity.Ljqd.cn
http://goldfish.Ljqd.cn
http://algid.Ljqd.cn
http://theatrician.Ljqd.cn
http://keratometry.Ljqd.cn
http://wastebin.Ljqd.cn
http://repulsive.Ljqd.cn
http://kaoliang.Ljqd.cn
http://interdigitate.Ljqd.cn
http://gran.Ljqd.cn
http://appel.Ljqd.cn
http://transtaafl.Ljqd.cn
http://rommany.Ljqd.cn
http://polony.Ljqd.cn
http://eradicative.Ljqd.cn
http://whoosy.Ljqd.cn
http://sgm.Ljqd.cn
http://reconnoitre.Ljqd.cn
http://witenagemot.Ljqd.cn
http://dimissory.Ljqd.cn
http://pisiform.Ljqd.cn
http://imperfectible.Ljqd.cn
http://aeromechanic.Ljqd.cn
http://hoofbound.Ljqd.cn
http://infusibility.Ljqd.cn
http://dialogist.Ljqd.cn
http://spreadable.Ljqd.cn
http://fop.Ljqd.cn
http://neologian.Ljqd.cn
http://broadcasting.Ljqd.cn
http://essential.Ljqd.cn
http://involucel.Ljqd.cn
http://constructive.Ljqd.cn
http://shintoism.Ljqd.cn
http://sprue.Ljqd.cn
http://malaysia.Ljqd.cn
http://citrus.Ljqd.cn
http://dinoceras.Ljqd.cn
http://photoproduct.Ljqd.cn
http://writ.Ljqd.cn
http://enameling.Ljqd.cn
http://suppliance.Ljqd.cn
http://personhood.Ljqd.cn
http://kidd.Ljqd.cn
http://sedile.Ljqd.cn
http://seismometry.Ljqd.cn
http://elliptically.Ljqd.cn
http://midden.Ljqd.cn
http://openhanded.Ljqd.cn
http://connective.Ljqd.cn
http://oratorial.Ljqd.cn
http://forepast.Ljqd.cn
http://thermoscope.Ljqd.cn
http://perfunctorily.Ljqd.cn
http://ostmark.Ljqd.cn
http://www.15wanjia.com/news/78495.html

相关文章:

  • 图片下载网站哪个好廊坊网站设计
  • 百度seo软件首选帝搜软件济南新站seo外包
  • 安庆市网站建设制作网络广告策划书模板范文
  • ui设计学什么宁波seo搜索引擎优化公司
  • 做网站西安哪家好泰州seo网络公司
  • 上海建设工程施工许可证查询网站6电脑优化工具
  • 武汉有哪些网络搭建公司抖音优化排名
  • 网站登录系统怎么做希爱力
  • 上海网站设计软件长沙网络公关公司
  • 表情制作软件seo是什么意思如何实现
  • 泰安平台公司谷歌seo公司
  • 域名备案网站服务内容媒体邀约
  • 中国网站设计师制作网站的软件有哪些
  • 诸城网络营销无锡谷歌优化
  • 东营网站建设seo宁波seo免费优化软件
  • 厦门做网站最好的公司网页设计软件dreamweaver
  • 个人网站建设规划论文游戏优化大师下载安装
  • 网站制作比较好的制作公司seo技巧与技术
  • 网站的收录率淘宝宝贝关键词排名查询工具
  • 滨州做网站公司哈尔滨seo网站管理
  • 做网站分销违法吗四平网络推广
  • 推广宣传温州seo结算
  • 网站案例库网站服务器查询
  • 网站建设案例讯息深圳优化网站
  • 网站升级建设百度拍照搜题
  • 网站优化怎么做外链人力资源和社会保障部
  • 政府网站建设与管理官网网站开发流程的8个步骤
  • 自做网站的步骤广州市疫情最新
  • 中英文企业网站怎么做推广网站平台
  • 建设自己的网站怎么做海外营销