C++线程std::thread中只能传输函数指针和参数,那么如何才能获取函数运行过后的值呢
时间: 2024-10-22 22:18:26 浏览: 21
c++多线程编程
在C++的std::thread中,你可以通过以下几种方式获取函数运行过后的值:
1. 使用引用:当你的函数不接受任何参数并且返回一个值时,你可以使用引用来获取这个返回值。在创建线程时,你需要将这个引用传递给std::thread对象。然后在函数运行结束后,你可以通过std::future对象来获取这个返回值。
例如:
```cpp
#include <future>
// 你的函数
int myFunction() {
// ...
return 42; // 返回值
}
int main() {
// 创建一个std::future对象来保存返回值
std::future<int> fut = std::async(myFunction);
// 在主线程中等待函数运行结束
int result = fut.get();
// 现在你可以使用result了
return 0;
}
```
2. 使用std::thread::detach():如果你希望在函数运行结束后不再关心它的返回值,你可以使用std::thread::detach()方法。这将允许函数在后台运行,但是主线程将不再等待它的结束。这种方法适用于那些你并不关心结果的情况。
例如:
```cpp
#include <thread>
// 你的函数
void myFunction() {
// ... 函数运行 ...
}
int main() {
// 创建一个std::thread对象并运行函数,但不等待它结束
std::thread t(myFunction);
t.detach();
return 0;
}
```
3. 使用std::thread::join()和std::thread::join_ex():如果你需要等待函数运行结束并获取它的返回值,你可以使用std::thread::join()或std::thread::join_ex()方法。这两个方法都会阻塞主线程,直到函数运行结束。注意,如果你使用了detach()方法,那么你需要小心处理这种情况,因为这可能会导致资源泄漏。
以上就是在C++中使用std::thread获取函数运行过后的值的一些常见方法。具体使用哪种方法取决于你的具体需求。
阅读全文