std::future
从 a创建 a 是否安全std::packaged_task
,它在单独的线程上执行,但并不总是检索其结果?
#include <future>
#include <thread>
class Result {
Result() {}
~Result() {}
};
void foo() {
std::packaged_task<Result()> task(..);
auto future = task.get_future();
std::thread thread(std::move(task), ...);
thread.detach();
if (future.wait_for(std::chrono::milliseconds(timeout_ms)) == std::future_status::ready) {
auto result = future.get(); <--- Task didn't take too long, retrieve future result
...
}
} <--- Task is taking too long, just abort and never call future.get()
它似乎适用于 Clang / libc++:~Result()
在返回的结果上被调用std::packaged_task
是否get()
最终被调用std::future
,但由于我在 C++ 文档中找不到关于这种使用模式的任何内容,我想确保它得到官方支持。