惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
月光博客
月光博客
腾讯CDC
Engineering at Meta
Engineering at Meta
博客园 - Franky
Vercel News
Vercel News
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
GbyAI
GbyAI
B
Blog
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog

Qt

撸了一个面向 Qt Widgets 的 Fluent 风格组件库 请问一下大家用 ai 做 qt 应用的时候有什么 skill 或者方法改进 ui 吗? qt 新手求助: No documents matching 'ui_mainwindow.h' could be found 请教几个 qt6, macos 打包遇到依赖问题。 新建一个 qt 项目,运行时,底下应用程序输出 1127, FromFilemap Qt5 托盘菜单右击时的异常 有没有什么工具可以美化 qt 界面的? Qt 有什么不错的第三方控件库吗? 寻求帮助!在 qt creator 里面创建 quick 项目失败,找不到原因。 关于 QT 中通过信号与槽的方式启动子线程的问题。 寻找一起开发这个开源项目的人, qt c++的,信息收藏、Kindle/微信读书/豆瓣阅读笔记管理 使用 Qt 做的软件界面太丑怎么办?有没有什么美工插件或者入门教程 有哪位大佬对修改 3DSlicer 或者开发插件有经验? 如何正确安装 QT? 请教 qt svg 打包后无法显示问题。 如何在 QT 中的多个级别的窗口之间传输消息 关于 QT(C++)通过继承 QObject 的方法实现多线程,子线程调用失效。 在 Qt 中控件同时使用智能指针和父子关系,会有二次删除风险吗? qt5 中文乱码问题怎么解决? 现在写 Qt 的主流 IDE 工具是什么? 请问多线程之间是如何协调配合的? QSerialPort 如何实现同一个串口设备命令做出不同操作? qt creator 插件开发问题请教 求助一个读硬盘序列号的问题 关于 Qt6.6.0 无法设置程序图标的问题 求助,如何编译 openwrt 的时候加入 qt6 为什么 Qt Creator 界面如此丑陋 大家了解 Qt 和 qt-creator 的开源协议吗?基于它,可以写闭源商用的软件吗? 求助,使用 CLion 开发 Qt,创建了 UI 类不会使用 mac 下的 Qt/C++应用,通过 url scheme 唤起时,如何获取到唤起的链接?
不太理解 Qt 多线程 Wait Conditions Example
wisefree · 2021-11-17 · via Qt
  • char buffer[BufferSize]是全局变量
buffer[i % BufferSize] = "ACGT"[QRandomGenerator::global()->bounded(4)];  // 写入数据

fprintf(stderr, "%c", buffer[i % BufferSize]);  // 读取数据

这个难道是线程安全的吗?

  • qt 中 Wait Conditions 需要考虑虚假唤醒吗?

qt 自带代码如下:

 #include <QtCore>

 #include <stdio.h>
 #include <stdlib.h>

 const int DataSize = 100000;

 const int BufferSize = 8192;
 char buffer[BufferSize];

 QWaitCondition bufferNotEmpty;
 QWaitCondition bufferNotFull;
 QMutex mutex;
 int numUsedBytes = 0;

 class Producer : public QThread
 {
 public:
     Producer(QObject *parent = NULL) : QThread(parent)
     {
     }

     void run() override
     {
         for (int i = 0; i < DataSize; ++i) {
             mutex.lock();
             if (numUsedBytes == BufferSize)
                 bufferNotFull.wait(&mutex);
             mutex.unlock();

             buffer[i % BufferSize] = "ACGT"[QRandomGenerator::global()->bounded(4)];

             mutex.lock();
             ++numUsedBytes;
             bufferNotEmpty.wakeAll();
             mutex.unlock();
         }
     }
 };

 class Consumer : public QThread
 {
     Q_OBJECT
 public:
     Consumer(QObject *parent = NULL) : QThread(parent)
     {
     }

     void run() override
     {
         for (int i = 0; i < DataSize; ++i) {
             mutex.lock();
             if (numUsedBytes == 0)
                 bufferNotEmpty.wait(&mutex);
             mutex.unlock();

             fprintf(stderr, "%c", buffer[i % BufferSize]);

             mutex.lock();
             --numUsedBytes;
             bufferNotFull.wakeAll();
             mutex.unlock();
         }
         fprintf(stderr, "\n");
     }

 signals:
     void stringConsumed(const QString &text);
 };

 int main(int argc, char *argv[])
 {
     QCoreApplication app(argc, argv);
     Producer producer;
     Consumer consumer;
     producer.start();
     consumer.start();
     producer.wait();
     consumer.wait();
     return 0;
 }