C++如何实现主线程注册回调函数,异步回调获取子线程的结果
时间: 2024-09-15 12:06:08 浏览: 50
在C++中,实现主线程注册回调函数并异步获取子线程结果通常涉及使用`std::thread`处理并发和`std::future`管理异步操作。以下是一个简单的示例:
```cpp
#include <iostream>
#include <thread>
#include <future>
// 定义一个函数作为子线程的任务
void do_something(int value) {
std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时操作
int result = value * 2;
std::cout << "子线程计算完成: " << result << '\n';
}
// 主线程的回调函数
void on_done(const std::future<int>& future) {
try {
int result = future.get(); // 等待异步任务完成
std::cout << "主线程收到结果: " << result << '\n';
} catch (std::exception& e) {
std::cerr << "Error: " << e.what() << '\n';
}
}
int main() {
// 创建子线程,并将do_something的返回值未来传递给on_done
std::thread worker_thread(do_something, 5);
std::future<int> result_future(worker_thread.get_id()); // 获取子线程的future
// 注册回调函数,当子线程完成后执行
result_future.then(on_done);
// 主线程继续执行其他任务
worker_thread.join(); // 确保子线程结束后再退出主线程
return 0;
}
```
在这个例子中,`do_something`函数在新创建的子线程中运行。`on_done`函数作为回调被`std::future`的`then`方法注册,只有当子线程执行完毕并且结果可用时,这个回调才会被调用。
阅读全文