Savelyev_Vyacheslav

OS_L3_Master3_Crit

May 8th, 2021
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.66 KB | None | 0 0
  1. // Master3_Crit.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. #define _CRT_SECURE_NO_WARNINGS
  5. #include <iostream>
  6. #include <thread>
  7. #include <ctime>
  8. #include <cstdlib>
  9.  
  10. #include <windows.h>
  11. #include <stdio.h>
  12. #include <string.h>
  13.  
  14. using namespace std;
  15. CRITICAL_SECTION section;
  16.  
  17. int* flouPrint[2];
  18. void setArr(int* arr, int size) {
  19.  
  20.     int i = 0;
  21.     while (i < size) {
  22.         arr[i] = (rand() % 10000) + 1;
  23.         i = i + 1;
  24.     }
  25.    
  26. }
  27.  
  28.  
  29.  
  30.  
  31. void quicksort(int* mas, int first, int last)
  32. {
  33.  
  34.     int mid, count;
  35.     int f = first, l = last;
  36.     mid = mas[(f + l) / 2]; //вычисление опорного элемента
  37.     do
  38.     {
  39.         while (mas[f] < mid) f++;
  40.         while (mas[l] > mid) l--;
  41.         if (f <= l) //перестановка элементов
  42.         {
  43.             count = mas[f];
  44.             mas[f] = mas[l];
  45.             mas[l] = count;
  46.             f++;
  47.             l--;
  48.         }
  49.     } while (f < l);
  50.     if (first < l) quicksort(mas, first, l);
  51.     if (f < last) quicksort(mas, f, last);
  52.    
  53. }
  54. void printArr(int* arr3, int n) {
  55.    
  56.     int i = 0;
  57.     while (i < n) {
  58.         cout << "i" << i << " " << arr3[i] << endl;
  59.         i = i + 1;
  60.     }
  61.    
  62. }
  63.  
  64. /////////////////////////////////////////////////
  65. void cs() {
  66.   EnterCriticalSection(&section);
  67.     setArr(flouPrint[0], *flouPrint[1]);
  68.     quicksort(flouPrint[0], 0, *flouPrint[1] - 1);
  69.     printArr(flouPrint[0], *flouPrint[1]);
  70.   LeaveCriticalSection(&section);
  71. }
  72.  
  73.  
  74. DWORD WINAPI ThreadSort(LPVOID lpParam) {
  75.    
  76.     cout << "__ThreadRunningSort__" << endl;
  77.     cs();  
  78.     cout << "__________potok Sort stoped________" << endl;
  79.     return 0;
  80. }
  81. void CreateThread_S(int* flouPrint, int Npr) {
  82.     //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Thread
  83.     HANDLE hThread_mass_sort;
  84.     DWORD ThreadIDs;
  85.  
  86.     hThread_mass_sort = CreateThread(
  87.         NULL,
  88.         0,
  89.         ThreadSort,
  90.         flouPrint // massiv parametrov
  91.         //0  // bez peredechiapram
  92.         ,
  93.         CREATE_SUSPENDED,
  94.         &ThreadIDs
  95.     );
  96.  
  97.     if (hThread_mass_sort == NULL) {
  98.         cout << "Thread failed" << GetLastError() << endl;
  99.     }
  100.     //zadat prioritet
  101.     SetThreadPriority(hThread_mass_sort, Npr); //THREAD_PRIORITY_NORMAL = 0
  102.     cout << "PriorytetS hThread_mass_sort = " << GetThreadPriority(hThread_mass_sort) << endl;
  103.     cout << "Thread Creation Success" << endl;
  104.     ResumeThread(hThread_mass_sort);/// zapusk potoka
  105.     cout << "ThreadID -->" << ThreadIDs << endl;
  106.    // WaitForSingleObject(hThread_mass_sort, INFINITE);
  107.    // DeleteCriticalSection(&section);
  108.     CloseHandle(hThread_mass_sort);
  109.    
  110. }
  111.  
  112.  
  113. DWORD WINAPI ThreadPrint(LPVOID lpParam) {
  114.     cout << "__ThreadRunningPrint__" << endl;
  115.     cs();
  116.     cout << "__________potok Print stoped________" << endl;
  117.     return 0;
  118. }
  119. //\\\\\\\\\\\\/Thread
  120. void CreateThread_P(int* flouPrint, int Npr) {
  121.     //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Thread
  122.    
  123.     HANDLE hThread_mass_print;
  124. //InitializeCriticalSection(&section);
  125.     DWORD ThreadIDp;
  126.  
  127.     hThread_mass_print = CreateThread(
  128.         NULL,
  129.         0,
  130.         ThreadPrint,
  131.         flouPrint // massiv parametrov
  132.         //0  // bez peredechiapram
  133.         ,
  134.         CREATE_SUSPENDED,
  135.         &ThreadIDp
  136.     );
  137.  
  138.     if (hThread_mass_print == NULL) {
  139.         cout << "Thread failed" << GetLastError() << endl;
  140.     }
  141.     //zadat prioritet
  142.     SetThreadPriority(hThread_mass_print, Npr); //THREAD_PRIORITY_NORMAL = 0
  143.     cout << "PriorytetP hThread_mass_print = " << GetThreadPriority(hThread_mass_print) << endl;
  144.     cout << "Thread Creation Success" << endl;
  145.     ResumeThread(hThread_mass_print);/// zapusk potoka
  146.     cout << "ThreadID -->" << ThreadIDp << endl;
  147.     WaitForSingleObject(hThread_mass_print, INFINITE);
  148.     DeleteCriticalSection(&section);
  149.     CloseHandle(hThread_mass_print);
  150.    
  151. }
  152.  
  153. int main()
  154. {
  155.  
  156.     setlocale(LC_ALL, "ru");
  157.     int size = 100;
  158.     int* arr = new int[size];
  159.     flouPrint[0] = arr;
  160.     flouPrint[1] = &size;
  161.  
  162.  
  163.  
  164. InitializeCriticalSection(&section);
  165.  
  166.     CreateThread_S(*flouPrint, 0);
  167.     CreateThread_P(*flouPrint, 0);
  168.     CreateThread_P(*flouPrint, 0);
  169.  
  170.  
  171.  
  172.    
  173.  
  174.    // Sleep(2000);
  175.    
  176.     return 1;
  177. }
  178.  
  179. // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
  180. // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
  181.  
  182. // Советы по началу работы
  183. //   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
  184. //   2. В окне Team Explorer можно подключиться к системе управления версиями.
  185. //   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
  186. //   4. В окне "Список ошибок" можно просматривать ошибки.
  187. //   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
  188. //   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
  189.  
Add Comment
Please, Sign In to add comment