QEventLoop

介绍

  1. 提供了一种异步编程的方式。
  2. 本地创建的QEventLoop并不会影响主Application的逻辑。
  3. 比while等待效率高。

使用

#include <QCoreApplication>
#include <QEventLoop>
#include <QObject>
#include <iostream>
QEventLoop loop;
int a = 3;
// 线程A
void funcA() {
// do something
loop.exec(); // 进入事件循环
std::cout << a << std::endl; // a == 4
}
// 线程B
class MyObject : public QObject {
Q_OBJECT
public slots:
void slotAdd() {
++a;
loop.exit(); // 退出事件循环
}
};
void signalAdd();
int main(int argc, char* argv[]) {
QCoreApplication app(argc, argv);
MyObject objB;
QObject::connect(&app, SIGNAL(signalAdd()), &objB, SLOT(slotAdd()));
// 启动线程A
QThread threadA;
threadA.start();
QMetaObject::invokeMethod(&threadA, "funcA", Qt::QueuedConnection);
// 启动线程B
QThread threadB;
threadB.start();
QMetaObject::invokeMethod(&threadB, "signalAdd", Qt::QueuedConnection);
return app.exec();
}
posted @   flxx  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示