50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								#include <iostream>
							 | 
						||
| 
								 | 
							
								#include <thread>
							 | 
						||
| 
								 | 
							
								#include <future>
							 | 
						||
| 
								 | 
							
								using namespace std;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void test1() {
							 | 
						||
| 
								 | 
							
									promise<int> p;
							 | 
						||
| 
								 | 
							
									future<int> f = p.get_future();
							 | 
						||
| 
								 | 
							
									thread t1([&]() {
							 | 
						||
| 
								 | 
							
										this_thread::sleep_for(chrono::milliseconds(1000));
							 | 
						||
| 
								 | 
							
										p.set_value(12);
							 | 
						||
| 
								 | 
							
										this_thread::sleep_for(chrono::milliseconds(1000));
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
									t1.detach();
							 | 
						||
| 
								 | 
							
									std::cout << "test1:: res:: " << f.get() << endl;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								void test2() {
							 | 
						||
| 
								 | 
							
									promise<int> p;
							 | 
						||
| 
								 | 
							
									future<int> f = p.get_future();
							 | 
						||
| 
								 | 
							
									shared_future<int> sf = f.share();
							 | 
						||
| 
								 | 
							
									thread t1([&]() {
							 | 
						||
| 
								 | 
							
										this_thread::sleep_for(chrono::milliseconds(1000));
							 | 
						||
| 
								 | 
							
										p.set_value(12);
							 | 
						||
| 
								 | 
							
										this_thread::sleep_for(chrono::milliseconds(1000));
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
									t1.detach();
							 | 
						||
| 
								 | 
							
									std::cout << "test2:: res:: " << sf.get() << sf .get() << endl;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								void test3() {
							 | 
						||
| 
								 | 
							
									auto fn = []()->int {
							 | 
						||
| 
								 | 
							
										this_thread::sleep_for(chrono::milliseconds(1000));
							 | 
						||
| 
								 | 
							
										return 12;
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
									auto f = async(launch::async, fn);
							 | 
						||
| 
								 | 
							
									packaged_task<int()> t(fn);
							 | 
						||
| 
								 | 
							
									t();
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									std::cout << "test3:: res:: " << f.get()  << t.get_future().get() << endl;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								int main() {
							 | 
						||
| 
								 | 
							
									test1();
							 | 
						||
| 
								 | 
							
									test2();
							 | 
						||
| 
								 | 
							
									test3();
							 | 
						||
| 
								 | 
							
									//这里通过条件变量 | 信号量 + 共享变量就能实现
							 | 
						||
| 
								 | 
							
									//用promise-future 感觉很浪费
							 | 
						||
| 
								 | 
							
									std::cout << "promise size:: " << sizeof(promise<int>) <<
							 | 
						||
| 
								 | 
							
										" future size:: " << sizeof(future<int>) <<
							 | 
						||
| 
								 | 
							
										" shared_future size:: " << sizeof(shared_future<int>) << endl;
							 | 
						||
| 
								 | 
							
									return 1;
							 | 
						||
| 
								 | 
							
								}
							 |