C++ 0x std::async 的应用
1 #include <iostream> 2 #include <thread> 3 #include <mutex> 4 #include <vector> 5 #include <algorithm> 6 #include <future> 7 using namespace std; 8 9 /* 10 知识点: 11 this_thread : 当前线程 12 chrono::system_clock::now() : 系统的当前时间点 13 future<void> async(std::launch::async,[](){...}) : 启动一个任务,返回的是一个 future 但一般直接 auto 14 this_thread::sleep_for(chrono::seconds(1)) : 将当前线程休眠1秒 15 chrono::duration_cast<chrono::milliseconds>(end - begin).count() : 计算两个时间点之间的差值 16 */ 17 18 // 打印出当前线程的 ID 19 void PrintThreadID(const char* name) { 20 cout << name << " Thread id is " << this_thread::get_id() << endl; 21 } 22 23 int main() { 24 // 得到开始时的系统时间 25 auto begin = chrono::system_clock::now(); 26 27 /* 28 可以通过stl::async函数的第一个参数控制任务的并行方式,它有如下三个取值: 29 launch::async : 异步方式。这个方式下,所有任务都会新启动一个线程执行 30 launch::deferred : 同步方式。 这个方式下,任务不会新启动线程,串行在创建任务的线程中执行。 31 launch::any : 综合方式。 这个方式下,会复用创建任务的线程。 (默认值) 32 */ 33 34 // 启动第一个任务 35 auto task1 = async([]{ 36 PrintThreadID("Task1"); 37 this_thread::sleep_for(chrono::seconds(1)); 38 return 3; 39 }); 40 41 // 启动第二个任务 42 auto task2 = async([]{ 43 PrintThreadID("Task2"); 44 this_thread::sleep_for(chrono::seconds(1)); 45 return 5; 46 }); 47 48 // get() 方法,本身就是 49 cout << task1.get() + task2.get() << endl; 50 51 // 得到结束时的系统时间 52 auto end = chrono::system_clock::now(); 53 54 // 这里是计算开始与结束之间的时间差 55 cout << "Spend Time : " << chrono::duration_cast<chrono::milliseconds>(end - begin).count() << endl; 56 57 return 0; 58 }