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

推荐订阅源

B
Blog RSS Feed
K
Kaspersky official blog
Forbes - Security
Forbes - Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
G
GRAHAM CLULEY
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
Scott Helme
Scott Helme
S
Securelist
美团技术团队
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
W
WeLiveSecurity
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
AI
AI
L
Lohrmann on Cybersecurity
S
Security Affairs
Cloudbric
Cloudbric
SecWiki News
SecWiki News
爱范儿
爱范儿
雷峰网
雷峰网
Engineering at Meta
Engineering at Meta
C
Cyber Attacks, Cyber Crime and Cyber Security
大猫的无限游戏
大猫的无限游戏
N
News and Events Feed by Topic
I
InfoQ
S
Secure Thoughts
AWS News Blog
AWS News Blog
A
About on SuperTechFans
Schneier on Security
Schneier on Security
酷 壳 – CoolShell
酷 壳 – CoolShell
The Last Watchdog
The Last Watchdog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Check Point Blog
P
Palo Alto Networks Blog
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Google DeepMind News
Google DeepMind News
Latest news
Latest news
I
Intezer
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
D
Docker

Qt

撸了一个面向 Qt Widgets 的 Fluent 风格组件库 - V2EX 请问一下大家用 ai 做 qt 应用的时候有什么 skill 或者方法改进 ui 吗? qt 新手求助: No documents matching 'ui_mainwindow.h' could be found - V2EX 请教几个 qt6, macos 打包遇到依赖问题。 - V2EX 新建一个 qt 项目,运行时,底下应用程序输出 1127, FromFilemap - V2EX Qt5 托盘菜单右击时的异常 - V2EX 有没有什么工具可以美化 qt 界面的? - V2EX Qt 有什么不错的第三方控件库吗? 寻求帮助!在 qt creator 里面创建 quick 项目失败,找不到原因。 - V2EX 关于 QT 中通过信号与槽的方式启动子线程的问题。 - V2EX 寻找一起开发这个开源项目的人, qt c++的,信息收藏、Kindle/微信读书/豆瓣阅读笔记管理 - V2EX 使用 Qt 做的软件界面太丑怎么办?有没有什么美工插件或者入门教程 - V2EX 有哪位大佬对修改 3DSlicer 或者开发插件有经验? - V2EX 如何正确安装 QT? - V2EX 请教 qt svg 打包后无法显示问题。 如何在 QT 中的多个级别的窗口之间传输消息 - V2EX 关于 QT(C++)通过继承 QObject 的方法实现多线程,子线程调用失效。 - V2EX 在 Qt 中控件同时使用智能指针和父子关系,会有二次删除风险吗? - V2EX qt5 中文乱码问题怎么解决? - V2EX 现在写 Qt 的主流 IDE 工具是什么? - V2EX 请问多线程之间是如何协调配合的? - V2EX QSerialPort 如何实现同一个串口设备命令做出不同操作? qt creator 插件开发问题请教 - V2EX 求助一个读硬盘序列号的问题 - V2EX 关于 Qt6.6.0 无法设置程序图标的问题 - V2EX 求助,如何编译 openwrt 的时候加入 qt6 - V2EX 为什么 Qt Creator 界面如此丑陋 - V2EX 大家了解 Qt 和 qt-creator 的开源协议吗?基于它,可以写闭源商用的软件吗? 求助,使用 CLion 开发 Qt,创建了 UI 类不会使用 - V2EX mac 下的 Qt/C++应用,通过 url scheme 唤起时,如何获取到唤起的链接? - V2EX Qt 中的 `QFontMetrics.boundingRect()` 算出来的文本长度有时候会不对,应该如何处理。 - V2EX 求助: Qt 开发 android 程序遇到编译不通过 Qt 里的 Qprocess 怎么完全 kill 一个 mpi 程序 - V2EX 请教一个 qt graphicsview 优化问题 - V2EX 求指点 QtWidget 程序如何改善 Wayland 下的兼容性? - V2EX Qt Quick 应用拖动的时候卡顿 - V2EX pro 文件中如何设置编译完后能运行指定的批处理文件? - V2EX 请教关于 Qt 事件的传播顺序的问题 - V2EX PyQt 交流群成立了,欢迎各位大佬加入 - V2EX 现在还建议提前学习 Qt 框架吗? - V2EX 正式环境下,如何分析 qt 程序的内存泄露? - V2EX 求教 : Qt 两个 QWidget 叠加显示问题 - V2EX 在自学 qt,因为习惯问题用的是 clion,标准 qt 工程没问题,但是想写 qt 插件, cmake 打出来的 dll 文件宿主不识别,请问有用 clion 开发过 qt6 插件的朋友么,求指导或者资料帮助 - V2EX QUdpSocket bind 特定的本地 ip,无法发送数据? - V2EX QT 界面如何实现随电脑百分比放大、缩小 - V2EX 希望找一位精通 QT 者:合作一短期项目,预计一月内完成。 - V2EX 为什么 ListView 没有随窗口大小自适应缩放? - V2EX 可以让 qmake 多项目并行编译吗? - V2EX pro 项目文件中,如何判断编译器?
不太理解 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;
 }