C++一个子线程不断更新变量,main函数中如何通过注册回调函数和回调函数,获取子线程中当前的变量的?只使用函数指针与thread
时间: 2024-09-13 12:09:15 浏览: 40
在C++中,如果你想要在主线程通过注册回调函数的方式从子线程获取子线程更新的变量,你可以使用`std::thread`和`std::future`,以及一个函数指针。首先,你需要在子线程中定义一个更新变量并返回其值的函数。然后,在主线程中,你可以创建一个`std::future`,该未来会保存子线程的结果。
这里是一个简单的示例:
```cpp
#include <iostream>
#include <thread>
#include <future>
// 子线程更新变量的函数
int updateVariable(int initial_value) {
// 在子线程中对变量进行操作
for (int i = 0; i < 10; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
// 更新变量
initial_value += i;
}
return initial_value;
}
// 主线程接收结果的回调函数
void callback(int result) {
std::cout << "Current value in the thread is: " << result << std::endl;
}
int main() {
int variable = 0;
// 创建子线程并启动
std::thread worker(updateVariable, variable);
// 创建一个future,它将持有子线程的结果
std::future<int> future_result = worker.get_future();
// 注册回调函数
future_result.then(callback); // 当子线程完成时,自动调用callback
// 等待子线程结束
worker.join();
return 0;
}
```
在这个例子中,当子线程`worker`结束时,它的返回值会被传递给`callback`函数,从而在主线程中获得更新后的变量值。
阅读全文