Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. #include <iostream>  
  2. #include <windows.h>  
  3. using namespace std;
  4. /*
  5. Написать программу, запускающую три дочерних потока. Каждый поток
  6. увеличивает  (начиная  с  0)  значение  счетчика  с  разной  скоростью  (использо-
  7. вать функцию sleep). При нажатии на клавишу ‘q’ закрыть все потоки и за-
  8. вершить выполнение программы.
  9. Приостановить  выполнение  первого  потока,  пока  счетчики  остальных
  10. потоков не достигнут значения 100.
  11. */
  12.  
  13. int n = 0;
  14. HANDLE hTh01, hTh02, hTh03;
  15.  
  16. void thread01()
  17. {
  18.     while (true) {
  19.         n++;  Sleep(50);
  20.     }
  21. }
  22.  
  23.  
  24. void thread02()
  25. {
  26.     while (true) {
  27.         n++;
  28.         cout << n;
  29.         Sleep(1000);
  30.         }
  31.     }
  32.  
  33. void thread03()
  34. {
  35.     while (true) {
  36.         n++;
  37.         cout << n;
  38.         Sleep(150);
  39.     }
  40. }
  41.  
  42. int main()
  43. {
  44.     DWORD  IDTh01;
  45.     hTh01 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread01,
  46.         NULL, CREATE_SUSPENDED, &IDTh01);
  47.     if (hTh01 == NULL) return GetLastError();
  48.     DWORD  IDTh02;
  49.     hTh02 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread02,
  50.         NULL, 0, &IDTh02);
  51.     if (hTh02 == NULL) return GetLastError();
  52.     DWORD  IDTh03;
  53.     hTh02 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread03,
  54.         NULL, 0, &IDTh03);
  55.     if (hTh03 == NULL) return GetLastError();
  56.  
  57.     char ch;
  58.     do
  59.     {
  60.         cin >> ch;
  61.         if (n > 100) {
  62.             ResumeThread(hTh01);
  63.         }
  64.     } while (ch != 'q');
  65.  
  66. TerminateThread(hTh01, 0);
  67. TerminateThread(hTh02, 0);
  68. TerminateThread(hTh03, 0);
  69.     CloseHandle(hTh01);
  70.     CloseHandle(hTh02);
  71.     CloseHandle(hTh03);
  72.  
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement