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

郑州网站优化培训机构网站建设有用吗

郑州网站优化培训机构,网站建设有用吗,wordpress发布文章更新失败,跨境电商平台有哪些分类核心概念 Qt中的QWaitCondition是一个用于多线程同步的类#xff0c;允许线程在某些条件满足时唤醒其他等待的线程。它通常与QMutex配合使用#xff0c;协调线程之间的执行顺序#xff0c;适用于生产者-消费者模型、任务队列调度等场景。 ​wait()#xff1a;使当前线程进…核心概念 Qt中的QWaitCondition是一个用于多线程同步的类允许线程在某些条件满足时唤醒其他等待的线程。它通常与QMutex配合使用协调线程之间的执行顺序适用于生产者-消费者模型、任务队列调度等场景。 ​wait()使当前线程进入等待状态并释放关联的互斥锁。当条件满足时线程被唤醒并重新获取锁。 ​wakeOne()唤醒一个正在等待的线程按操作系统调度策略选择。 ​wakeAll()唤醒所有正在等待的线程。 常见用法 **​线程等待条件**线程检查条件若不满足则调用wait()进入等待。 **​条件通知**另一线程修改条件后调用wakeOne()或wakeAll()通知等待线程。 **​配合QMutex**所有条件检查和修改必须在QMutex保护下进行避免竞态条件。 任务队列描述 **​任务队列**主线程将任务添加到队列多个工作线程从队列中获取并执行任务。 **​同步机制**当队列为空时工作线程等待当新任务到达时唤醒一个线程处理。 **​优雅退出**支持安全终止所有工作线程。 代码实现 #include QCoreApplication #include QThread #include QMutex #include QWaitCondition #include QQueue #include QDebug #include functional// 定义任务类型使用std::function包装可调用对象 using Task std::functionvoid();// 线程安全的任务队列 class TaskQueue { public:void addTask(const Task task) {QMutexLocker locker(m_mutex);m_queue.enqueue(task);m_cond.wakeOne(); // 唤醒一个等待线程}Task getTask() {QMutexLocker locker(m_mutex);//离开作用域即析构时自动对m_mutex解锁// 使用while防止虚假唤醒while (m_queue.isEmpty() !m_stop) {m_cond.wait(m_mutex); // 自动释放锁并等待被唤醒即wait返回之后自动对m_mutex重新上锁}if (m_stop) return nullptr; // 终止信号return m_queue.dequeue();}void stop() {QMutexLocker locker(m_mutex);m_stop true;m_cond.wakeAll(); // 唤醒所有线程退出}private:QMutex m_mutex;QWaitCondition m_cond;QQueueTask m_queue;bool m_stop false; };// 工作线程不断从队列中取任务执行 class Worker : public QThread { public:Worker(TaskQueue* queue) : m_queue(queue) {}void run() override {while (true) {Task task m_queue-getTask();if (!task) break; // 收到终止信号task(); // 执行任务}qDebug() Worker thread QThread::currentThread() stopped.;}private:TaskQueue* m_queue; };int main(int argc, char* argv[]) {QCoreApplication a(argc, argv);// 创建任务队列和4个工作线程TaskQueue queue;QListWorker* workers;for (int i 0; i 4; i) {Worker* worker new Worker(queue);worker-start();workers.append(worker);}// 添加10个任务到队列for (int i 0; i 10; i) {queue.addTask([i]() {qDebug() Task i processed by QThread::currentThread();QThread::msleep(100); // 模拟任务耗时});}// 等待所有任务执行完毕QThread::sleep(2);// 停止所有工作线程queue.stop();for (Worker* worker : workers) {worker-wait();delete worker;}qDebug() All workers stopped.;return 0; }运行代码输出 Task 0 processed by QThread(0x1087708) Task 3 processed by QThread(0x10879d0) Task 1 processed by QThread(0x10878d0) Task 2 processed by QThread(0x1087800) Task 4 processed by QThread(0x1087800) Task 5 processed by QThread(0x10878d0) Task 7 processed by QThread(0x10879d0) Task 6 processed by QThread(0x1087708) Task 8 processed by QThread(0x10878d0) Task 9 processed by QThread(0x1087800) Worker thread QThread(0x1087708) stopped. Worker thread QThread(0x10879d0) stopped. Worker thread QThread(0x1087800) stopped. Worker thread QThread(0x10878d0) stopped. All workers stopped.代码解析 1. ​任务队列TaskQueue类​ ​线程安全操作 通过QMutex保护任务队列m_queue和停止标志m_stop。 条件等待 getTask()中使用while (m_queue.isEmpty() !m_stop)防止虚假唤醒。 当队列为空且未收到停止信号时调用m_cond.wait(m_mutex)释放锁并等待。 终止机制 stop()方法设置m_stop true并通过wakeAll()唤醒所有线程。 工作线程收到nullptr任务时退出循环。 2. ​工作线程Worker类​ **​任务循环**持续调用getTask()获取任务直到收到终止信号。 **​任务执行**直接调用task()执行实际逻辑如I/O操作、计算等。 3. ​主线程逻辑 **​创建线程池**启动4个工作线程监听任务队列。 **​动态添加任务**通过Lambda表达式生成任务支持任意类型的操作。 ​优雅退出 调用queue.stop()通知所有线程停止。 使用worker-wait()确保线程安全退出后清理资源。 关键特性 **​动态任务分配**支持任意数量、类型的任务。 **​高效唤醒策略**wakeOne()确保每次新任务只唤醒一个线程减少竞争。 **​资源安全**通过RAIIQMutexLocker自动管理锁避免死锁。 **​跨平台**代码在Windows/Linux/macOS上行为一致。 应用场景扩展 ​**Web服务器**将HTTP请求作为任务分配给线程池处理。 **​批量数据处理**多个线程并行处理文件、数据库操作。 **​GUI程序后台任务**保持界面响应性耗时操作放入任务队列。 通过这种模式可以轻松实现高并发任务处理同时避免手动管理线程的复杂性。
http://www.hkea.cn/news/14347318/

相关文章:

  • 做理财的网站有哪些问题wordpress 帮助文档
  • 免费做h5的网站怎么做网站变更
  • 安微凤阳县建设局网站众展seo推广
  • 网站首页设计过程强企网做网站
  • 二级建造师建设云网站装饰工程预算与报价
  • 惠州网站制作推广WordPress本地可以调出点赞功能吗
  • 优化网站搜索某学校网站建设方案论文
  • 摄影个人网站模板公司内网怎么搭建
  • iis 网站访问权限设计画册
  • 可以做动画的网站有人看片吗免费的
  • 宁波建站模板网站建设声明函
  • 网站 语言选择 中文 英文 源码网站建设仿站
  • 公司网站制作需要多少钱义乌php做学校网站免费
  • wordpress做一个视频网站吗辽宁建设工程信息网评标专家入库
  • ps做网站需注意什么新竹自助网站
  • 网站建设实力龙岩app定制
  • 做网站有限公司如何建设成为营销网站
  • 中国建设银行官网网站网站建设公司新闻
  • 免费建网站域名网络服务商机构
  • 校园网站建设案例网站建设服务好公司排名
  • app网站建设工作师企业信息系统官网
  • 建网站怎么做报分系统客源汇软件效果怎么样
  • 有没有做文创的网站国内响应式网站案例
  • 建站都需要什么竹子建站邀请码
  • 劳保用品 技术支持 东莞网站建设梵克雅宝戒指
  • cms网站开发毕设无锡网站建设网站
  • 2017网站设计尺寸网站建设 工作职责
  • 网站建设作业网站设计怎么做才好看
  • 上海做网站那家好绍兴免费网站建站模板
  • 济南品牌网站建设公司百度信息流是什么