qt main函数中使用线程回调
时间: 2024-10-11 11:04:02 浏览: 36
在Qt中,在主函数`main()`中使用线程回调,通常涉及到异步操作,特别是处理耗时任务或者避免阻塞UI线程。当你在一个新线程中启动一个长时间运行的任务,例如网络请求、文件I/O等,可以创建一个`QThread`并在线程对象上注册一个槽函数作为该任务完成后将结果返回给主线程的回调。
以下是一个简单的示例:
```cpp
#include <QApplication>
#include <QThread>
#include <QFuture>
class Worker : public QObject
{
public:
Worker(QObject *parent = nullptr)
: QObject(parent)
{
}
Q_INVOKABLE void runTask(int value)
{
int result = someExpensiveCalculation(value);
emit taskCompleted(result);
}
signals:
void taskCompleted(int result);
private:
int someExpensiveCalculation(int value) { /* ... */ }
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建Worker对象并在新线程中运行
Worker worker;
QThread thread(&worker);
worker.moveToThread(&thread); // 确保工作在新线程上
connect(&worker, &Worker::taskCompleted, this, &QApplication::postEvent, Qt::QueuedConnection); // 设置回调
thread.start(); // 开启新线程
thread.quit(); // 启动后立即停止,让线程在runTask执行完后再退出
thread.wait(); // 阻塞主线程直到任务完成
// 主线程接收到taskCompleted信号后,通过回调函数处理结果
int result = qApp->eventDispatcher()->processEvents(QEventLoop::ExcludeUserInputEvents);
qDebug() << "Task completed with result: " << result;
return app.exec();
}
```
在这个例子中,`someExpensiveCalculation`代表了耗时的操作,`taskCompleted`信号发出后,主线程的回调函数就会被执行。
阅读全文