#include <iostream>
#include <future>
#include <thread>
#include <chrono>
#define LOG() std::cout << __func__ << " : "
void test()
{
LOG() << "IN\n";
using namespace std::chrono_literals;
std::this_thread::sleep_for( 1s );
LOG() << "OUT\n";
}
int main()
{
LOG() << "Calling test()...\n";
auto f = std::async( std::launch::async, test );
LOG() << "Running test()...\n";
// ... ...
// ... You can do other stuff here ...
// ... ...
f.wait(); // Blocking call to wait for the result to be available
LOG() << "Exiting...\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnV0dXJlPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8Y2hyb25vPgoKI2RlZmluZSBMT0coKQlzdGQ6OmNvdXQgPDwgX19mdW5jX18gPDwgIiA6ICIKCnZvaWQgdGVzdCgpCnsKCUxPRygpIDw8ICJJTlxuIjsKCQoJdXNpbmcgbmFtZXNwYWNlIHN0ZDo6Y2hyb25vX2xpdGVyYWxzOwoJc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKCAxcyApOwoJCglMT0coKSA8PCAiT1VUXG4iOwp9CgppbnQgbWFpbigpCnsKCUxPRygpIDw8ICJDYWxsaW5nIHRlc3QoKS4uLlxuIjsKCQoJYXV0byBmID0gc3RkOjphc3luYyggc3RkOjpsYXVuY2g6OmFzeW5jLCB0ZXN0ICk7CgkKCUxPRygpIDw8ICJSdW5uaW5nIHRlc3QoKS4uLlxuIjsKCQoJLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KCS8vIC4uLiBZb3UgY2FuIGRvIG90aGVyIHN0dWZmIGhlcmUgLi4uCgkvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgoJCglmLndhaXQoKTsgLy8gQmxvY2tpbmcgY2FsbCB0byB3YWl0IGZvciB0aGUgcmVzdWx0IHRvIGJlIGF2YWlsYWJsZQoJCglMT0coKSA8PCAiRXhpdGluZy4uLlxuIjsKCQoJcmV0dXJuIDA7Cn0=