Advertisement
Guest User

Untitled

a guest
Sep 21st, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <thread>
  4. #include <vector>
  5. #include <future>
  6. #include <string>
  7. #include <random>
  8. #include <ctime>
  9.  
  10. using namespace std;
  11.  
  12.  
  13. int main()
  14. {
  15. setlocale(LC_ALL, "Russian"); // русский язык в консоли
  16. cout << "Чтобы запустить процессы, нажмите Enter...";
  17. getchar();
  18. bool a = true; //чек завершения программы
  19.  
  20. while (a) { //зациклить программу
  21. using fut_t = future<std::string>;
  22.  
  23. vector<fut_t> threads; //вектор потоков
  24.  
  25. auto is_future_valid = [](fut_t& fut) //указатель на функцию
  26. { //проверка, что поток действителен
  27. return fut.valid();
  28. };
  29.  
  30. auto is_future_ready = [&is_future_valid](fut_t& fut) //проверка, что поток завершен
  31. {
  32. return is_future_valid(fut) && fut.wait_for(
  33. chrono::microseconds(100)) == future_status::ready;
  34. };
  35.  
  36. srand(time(0));
  37. vector<int> tt;
  38. for (int i = 0; i < 5; i++) {
  39. tt.emplace_back(1 + rand() % 15);
  40. }
  41.  
  42. for (int i = 0; i < 5; i++) {
  43. threads.emplace_back(async(launch::async, [tt,i] {
  44. this_thread::sleep_for(chrono::seconds(tt[i]));
  45. return string(to_string(i + 1) + "-й поток закончил свою работу...");
  46. }));
  47. }
  48.  
  49. //пока есть хоть один не завершившийся поток
  50. while (any_of(threads.begin(), threads.end(), is_future_valid)) { // проверка, что какой-нибудь процесс завершился
  51. auto element = find_if(threads.begin(), threads.end(), is_future_ready); // находим готовый поток (получаем итератор)
  52. if (element == threads.end())
  53. {
  54. continue;
  55. }
  56. cout << element->get() << endl; // отмечаем конец процесса
  57. }
  58.  
  59. cout << "Чтобы запустить процессы повторно, введите continue\nЧтобы выйти из программы, введите exit\n";
  60. string b;
  61. while (true) {
  62. cin >> b;
  63. if (b == "continue") {
  64. break;
  65. }
  66. else if (b == "exit") {
  67. a = false;
  68. break;
  69. }
  70. else {
  71. cout << "Вы ввели недопустимую команду, попробуйте снова:";
  72. }
  73. }
  74. }
  75. cout << "Программа завершена...";
  76. return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement