#include <iostream>
#include <string>
#include <thread>
#include <future>
#include <algorithm>
std::string get_str_letters(int n) {
using namespace std::literals;
std::string s(n, '\0');
std::generate_n(s.begin(), n,
[]{ return rand() % 26 + 'A';} );
std::this_thread::sleep_for(3s);
return s;
}
std::string get_str_digits(int n) {
using namespace std::literals;
std::string s(n, '\0');
std::generate_n(s.begin(), n,
[]{ return rand() % 10 + '0';});
std::this_thread::sleep_for(3s);
return s;
}
int main() {
auto start = std::chrono::steady_clock::now();
auto ftr1=async(std::launch::deferred, get_str_letters,20);
auto ftr2=async(std::launch::deferred, get_str_digits,20);
// return değeri olan future<std::string> nesnesini alacağız.
auto s1 = ftr1.get(); // Buraya kadar çalıştırılan bir func yok.get funcı çalıştığı anda func kodu çalıştırılacak
auto s2 = ftr2.get(); // Burada da diğeri çalışacak
auto end = std::chrono::steady_clock::now();
std::cout << std::chrono::duration<double>(end-start).count() << " saniye\n";
std::cout << s1 + s2 << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8ZnV0dXJlPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RkOjpzdHJpbmcgZ2V0X3N0cl9sZXR0ZXJzKGludCBuKSB7CnVzaW5nIG5hbWVzcGFjZSBzdGQ6OmxpdGVyYWxzOwpzdGQ6OnN0cmluZyBzKG4sICdcMCcpOwpzdGQ6OmdlbmVyYXRlX24ocy5iZWdpbigpLCBuLCAKW117IHJldHVybiByYW5kKCkgJSAyNiArICdBJzt9ICk7CnN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2Zvcigzcyk7CgpyZXR1cm4gczsKfQpzdGQ6OnN0cmluZyBnZXRfc3RyX2RpZ2l0cyhpbnQgbikgewp1c2luZyBuYW1lc3BhY2Ugc3RkOjpsaXRlcmFsczsKc3RkOjpzdHJpbmcgcyhuLCAnXDAnKTsKc3RkOjpnZW5lcmF0ZV9uKHMuYmVnaW4oKSwgbiwgCltdeyByZXR1cm4gcmFuZCgpICUgMTAgKyAnMCc7fSk7CnN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2Zvcigzcyk7CnJldHVybiBzOwp9CmludCBtYWluKCkgewphdXRvIHN0YXJ0ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CgphdXRvIGZ0cjE9YXN5bmMoc3RkOjpsYXVuY2g6OmRlZmVycmVkLCBnZXRfc3RyX2xldHRlcnMsMjApOwphdXRvIGZ0cjI9YXN5bmMoc3RkOjpsYXVuY2g6OmRlZmVycmVkLCBnZXRfc3RyX2RpZ2l0cywyMCk7CgovLyByZXR1cm4gZGXEn2VyaSBvbGFuIGZ1dHVyZTxzdGQ6OnN0cmluZz4gbmVzbmVzaW5pIGFsYWNhxJ/EsXouCmF1dG8gczEgPSBmdHIxLmdldCgpOyAvLyBCdXJheWEga2FkYXIgw6dhbMSxxZ90xLFyxLFsYW4gYmlyIGZ1bmMgeW9rLmdldCBmdW5jxLEgw6dhbMSxxZ90xLHEn8SxIGFuZGEgZnVuYyBrb2R1IMOnYWzEscWfdMSxcsSxbGFjYWsKYXV0byBzMiA9IGZ0cjIuZ2V0KCk7IC8vIEJ1cmFkYSBkYSBkacSfZXJpIMOnYWzEscWfYWNhawoKYXV0byBlbmQgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKCnN0ZDo6Y291dCA8PCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihlbmQtc3RhcnQpLmNvdW50KCkgPDwgIiBzYW5peWVcbiI7CnN0ZDo6Y291dCA8PCBzMSArIHMyIDw8ICJcbiI7Cn0KCg==