qteventloop 实现 调用某个函数,从回调获取到数据后,再继续执行
时间: 2024-03-06 09:50:43 浏览: 30
以下是一个示例,演示如何使用QEventLoop等待一个回调函数完成后继续执行代码:
```c++
#include <QCoreApplication>
#include <QTimer>
#include <QDebug>
#include <QEventLoop>
void asyncFunction(int input, std::function<void(int)> callback)
{
QTimer::singleShot(1000, [=]() {
int result = input * 2;
callback(result);
});
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QEventLoop loop;
asyncFunction(5, [&](int result) {
qDebug() << "Result:" << result;
loop.quit(); // 结束事件循环
});
loop.exec(); // 等待事件循环结束
qDebug() << "Done";
return a.exec();
}
```
在这个示例中,我们定义了一个异步函数`asyncFunction`,它接受一个整数`input`和一个回调函数`callback`。`asyncFunction`模拟一个耗时的操作,比如网络请求或者文件读写,然后在1秒后调用回调函数,将结果传递给它。
在`main`函数中,我们创建了一个`QEventLoop`对象,并调用`asyncFunction`,传入一个lambda表达式作为回调函数。这个lambda表达式输出结果并调用`loop.quit()`,结束事件循环。然后我们调用`loop.exec()`,等待事件循环结束。当`asyncFunction`调用回调函数后,`loop.quit()`会被调用,事件循环结束后,程序继续执行,输出`Done`。
这个示例演示了如何使用`QEventLoop`等待一个回调函数完成后继续执行代码。可以将`asyncFunction`替换为任何异步函数,只需要将回调函数传递给它,然后使用`QEventLoop`等待回调函数完成即可。