Savelyev_Vyacheslav

OS_laba2_Threads

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