#include <iostream>
#include <future>
#include <thread>
#include <vector>
#include <chrono>

using namespace std;

int main() {
	auto start = chrono::steady_clock::now();
	auto timestamp = [start]( ostream & s )->ostream& {
		auto now = chrono::steady_clock::now();
		auto elapsed = chrono::duration_cast<chrono::microseconds>(now - start);
		return s << "[" << elapsed.count() << "us] ";
	};
	
	vector<future<int>> futures;
	for( int i = 0; i < 5; i++ )
	{
		futures.emplace_back( async(launch::async,
			[=](){
				timestamp(cout) << "Launch " << i << endl;
				return i;
			} ) );
	}
	
	this_thread::sleep_for( chrono::milliseconds(100) );
	
	for( auto & f : futures ) timestamp(cout) << "Get " << f.get() << endl;
	
	return 0;
}