QEventLoop
介绍
- 提供了一种异步编程的方式。
- 本地创建的QEventLoop并不会影响主Application的逻辑。
- 比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();
}
本文来自博客园,作者:flxx,转载请注明原文链接:https://www.cnblogs.com/faithlocus/p/16769447.html