#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnV0dXJlPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2hyb25vPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJYXV0byBzdGFydCA9IGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKCWF1dG8gdGltZXN0YW1wID0gW3N0YXJ0XSggb3N0cmVhbSAmIHMgKS0+b3N0cmVhbSYgewoJCWF1dG8gbm93ID0gY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwoJCWF1dG8gZWxhcHNlZCA9IGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJvbm86Om1pY3Jvc2Vjb25kcz4obm93IC0gc3RhcnQpOwoJCXJldHVybiBzIDw8ICJbIiA8PCBlbGFwc2VkLmNvdW50KCkgPDwgInVzXSAiOwoJfTsKCQoJdmVjdG9yPGZ1dHVyZTxpbnQ+PiBmdXR1cmVzOwoJZm9yKCBpbnQgaSA9IDA7IGkgPCA1OyBpKysgKQoJewoJCWZ1dHVyZXMuZW1wbGFjZV9iYWNrKCBhc3luYyhsYXVuY2g6OmFzeW5jLAoJCQlbPV0oKXsKCQkJCXRpbWVzdGFtcChjb3V0KSA8PCAiTGF1bmNoICIgPDwgaSA8PCBlbmRsOwoJCQkJcmV0dXJuIGk7CgkJCX0gKSApOwoJfQoJCgl0aGlzX3RocmVhZDo6c2xlZXBfZm9yKCBjaHJvbm86Om1pbGxpc2Vjb25kcygxMDApICk7CgkKCWZvciggYXV0byAmIGYgOiBmdXR1cmVzICkgdGltZXN0YW1wKGNvdXQpIDw8ICJHZXQgIiA8PCBmLmdldCgpIDw8IGVuZGw7CgkKCXJldHVybiAwOwp9