#include <iostream>
#include <iomanip>
#include <future>
#include <chrono>
using namespace std;
void callback1(const char * s)
{
cout << "-->" << s << endl;
}
void callback2(const char * s)
{
cout << "==>" << s << endl;
}
void async_func(const char * s, void(*back)(const char*))
{
for(int i = 0; i < 100; ++i)
{
back(s);
this_thread::sleep_for(chrono::milliseconds(10));
}
}
int main(int argc, const char * argv[])
{
future<void> f = async(async_func,"First",callback1);
future<void> g = async(async_func,"Second",callback2);
f.get();
g.get();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGZ1dHVyZT4KI2luY2x1ZGUgPGNocm9ubz4KCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBjYWxsYmFjazEoY29uc3QgY2hhciAqIHMpCnsKICAgIGNvdXQgPDwgIi0tPiIgPDwgcyA8PCBlbmRsOwp9Cgp2b2lkIGNhbGxiYWNrMihjb25zdCBjaGFyICogcykKewogICAgY291dCA8PCAiPT0+IiA8PCBzIDw8IGVuZGw7Cn0KCnZvaWQgYXN5bmNfZnVuYyhjb25zdCBjaGFyICogcywgdm9pZCgqYmFjaykoY29uc3QgY2hhciopKQp7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpCiAgICB7CiAgICAgICAgYmFjayhzKTsKICAgICAgICB0aGlzX3RocmVhZDo6c2xlZXBfZm9yKGNocm9ubzo6bWlsbGlzZWNvbmRzKDEwKSk7CiAgICB9Cn0KCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBmdXR1cmU8dm9pZD4gZiA9IGFzeW5jKGFzeW5jX2Z1bmMsIkZpcnN0IixjYWxsYmFjazEpOwogICAgZnV0dXJlPHZvaWQ+IGcgPSBhc3luYyhhc3luY19mdW5jLCJTZWNvbmQiLGNhbGxiYWNrMik7CiAgICBmLmdldCgpOwogICAgZy5nZXQoKTsKfQo=