Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <windows.h>
- using namespace std;
- /*
- Написать программу, запускающую три дочерних потока. Каждый поток
- увеличивает (начиная с 0) значение счетчика с разной скоростью (использо-
- вать функцию sleep). При нажатии на клавишу ‘q’ закрыть все потоки и за-
- вершить выполнение программы.
- Приостановить выполнение первого потока, пока счетчики остальных
- потоков не достигнут значения 100.
- */
- int n = 0;
- HANDLE hTh01, hTh02, hTh03;
- void thread01()
- {
- while (true) {
- n++; Sleep(50);
- }
- }
- void thread02()
- {
- while (true) {
- n++;
- cout << n;
- Sleep(1000);
- }
- }
- void thread03()
- {
- while (true) {
- n++;
- cout << n;
- Sleep(150);
- }
- }
- int main()
- {
- DWORD IDTh01;
- hTh01 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread01,
- NULL, CREATE_SUSPENDED, &IDTh01);
- if (hTh01 == NULL) return GetLastError();
- DWORD IDTh02;
- hTh02 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread02,
- NULL, 0, &IDTh02);
- if (hTh02 == NULL) return GetLastError();
- DWORD IDTh03;
- hTh02 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread03,
- NULL, 0, &IDTh03);
- if (hTh03 == NULL) return GetLastError();
- char ch;
- do
- {
- cin >> ch;
- if (n > 100) {
- ResumeThread(hTh01);
- }
- } while (ch != 'q');
- TerminateThread(hTh01, 0);
- TerminateThread(hTh02, 0);
- TerminateThread(hTh03, 0);
- CloseHandle(hTh01);
- CloseHandle(hTh02);
- CloseHandle(hTh03);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement