std::thread thread_track = std::thread(& {track_thread(); }); thread_track.detach();函数track_thread有返回值,如何获取track_thread的返回值,使用microsoft c++
时间: 2024-11-25 17:32:55 浏览: 5
在Microsoft C++中,`std::thread`对象调用`detach()`后会使其脱离当前线程,使得主线程不会等待它的完成,也就无法直接获取到线程的返回值。因为`detach()`后的线程是单独运行的,除非你在主线程中保存了线程的句柄或者其他方式记录,否则无法直接访问其内部返回值。
如果你想要在主线程得到`track_thread()`的返回值,你应该避免使用`detach()`,而是在创建线程时使用`async`或`start`(C++17及更高版本),这样可以让主线程在适当的时候获取结果。
例如,假设`track_thread`是一个异步操作:
```cpp
#include <future>
// 假设 track_thread 返回一个 std::future<int>
std::future<int> track_thread_future;
auto track_thread_task = []() -> std::future<int> {
// 这里是你原来的track_thread函数,现在返回一个future
return some_async_function();
};
// 启动线程并获取future
track_thread_future = std::move(track_thread_task);
// 然后在你需要的地方获取结果
try {
int result = track_thread_future.get();
} catch (const std::exception& e) {
// 处理异常
}
```
这样,你可以在`get()`调用时阻塞直到线程完成并获取其返回值。
阅读全文