#include <iostream> // std::cout
#include <future> // std::packaged_task, std::future
#include <chrono> // std::chrono::seconds
#include <thread> // std::thread, std::this_thread::sleep_for
// count down taking a second for each value:
int countdown(int from, int to) {
for (int i = from; i != to; --i) {
std::cout << i << '\n';
std::this_thread::sleep_for(std::chrono::seconds(1));
}
std::cout << "Finished!\n";
return from - to;
}
int main()
{
// 1.创建一个packaged_task 包装countdown
std::packaged_task<int(int, int)> task(countdown);
// 2.直接获得当前packaged_task的期望对象
std::future<int> ret = task.get_future();
// 3.使用当前的packaged_task创建线程, countdown已经开始执行
std::thread th(std::move(task), 10, 0);
// 4.死等待, 直到countdown函数退出返回
int value = ret.get();
std::cout << "The countdown lasted for " << value << " seconds.\n";
th.join();
return 0;
}