C++标准库函数std::async
1、std::async
std::async
是C++11的标准库函数,用于创建执行异步任务并返回std::future对象来获取异步执行的结果状态。该函数最简单的用法如下所示:
#include <iostream> #include <thread> #include <future> std::string promise_string() { for (int i = 0; i < 200; i++) { std::this_thread::sleep_for(std::chrono::milliseconds(10)); std::cout << "sleep" << std::endl; } return __func__; } int main() { std::future<std::string> fu = std::async(promise_string); system("pause"); }
以上代码中promise_string函数将在后台与主线程同步执行。
2、std::async的两种执行策略std::launch::async与std::launch::deferred
... std::future<std::string> fu = std::async(std::launch::async, promise_string); system("pause"); ... std::future<std::string> fu = std::async(std::launch::deferred, promise_string);
std::cout << fu.get().c_str() << std::endl; system("pause");
策略std::launch::async强制在新线程中执行,但并不保证一定会在新线程中执行异步任务,具体的执行方式取决于实现;策略std::launch::deferred延迟执行,直到调用get()或wait()函数。以上两段代码展示两种策略下异步任务的执行,在std::launch::deferred策略下,不调用fu.get(),异步任务将不会执行。
又没有什么可说的