fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <thread>
  4. #include <future>
  5. #include <algorithm>
  6.  
  7. std::string get_str_letters(int n) {
  8. using namespace std::literals;
  9. std::string s(n, '\0');
  10. std::generate_n(s.begin(), n,
  11. []{ return rand() % 26 + 'A';} );
  12. std::this_thread::sleep_for(3s);
  13.  
  14. return s;
  15. }
  16. std::string get_str_digits(int n) {
  17. using namespace std::literals;
  18. std::string s(n, '\0');
  19. std::generate_n(s.begin(), n,
  20. []{ return rand() % 10 + '0';});
  21. std::this_thread::sleep_for(3s);
  22. return s;
  23. }
  24. int main() {
  25. auto start = std::chrono::steady_clock::now();
  26.  
  27. auto ftr1=async(std::launch::deferred, get_str_letters,20);
  28. auto ftr2=async(std::launch::deferred, get_str_digits,20);
  29.  
  30. // return değeri olan future<std::string> nesnesini alacağız.
  31. auto s1 = ftr1.get(); // Buraya kadar çalıştırılan bir func yok.get funcı çalıştığı anda func kodu çalıştırılacak
  32. auto s2 = ftr2.get(); // Burada da diğeri çalışacak
  33.  
  34. auto end = std::chrono::steady_clock::now();
  35.  
  36. std::cout << std::chrono::duration<double>(end-start).count() << " saniye\n";
  37. std::cout << s1 + s2 << "\n";
  38. }
  39.  
  40.  
Success #stdin #stdout 0.01s 5312KB
stdin
Standard input is empty
stdout
6.00016 saniye
NWLRBBMQBHCDARZOWKKY18792023759228973612