Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Master3_Crit.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
- //
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <thread>
- #include <ctime>
- #include <cstdlib>
- #include <windows.h>
- #include <stdio.h>
- #include <string.h>
- using namespace std;
- CRITICAL_SECTION section;
- int* flouPrint[2];
- void setArr(int* arr, int size) {
- int i = 0;
- while (i < size) {
- arr[i] = (rand() % 10000) + 1;
- i = i + 1;
- }
- }
- void quicksort(int* mas, int first, int last)
- {
- int mid, count;
- int f = first, l = last;
- mid = mas[(f + l) / 2]; //вычисление опорного элемента
- do
- {
- while (mas[f] < mid) f++;
- while (mas[l] > mid) l--;
- if (f <= l) //перестановка элементов
- {
- count = mas[f];
- mas[f] = mas[l];
- mas[l] = count;
- f++;
- l--;
- }
- } while (f < l);
- if (first < l) quicksort(mas, first, l);
- if (f < last) quicksort(mas, f, last);
- }
- void printArr(int* arr3, int n) {
- int i = 0;
- while (i < n) {
- cout << "i" << i << " " << arr3[i] << endl;
- i = i + 1;
- }
- }
- /////////////////////////////////////////////////
- void cs() {
- EnterCriticalSection(§ion);
- setArr(flouPrint[0], *flouPrint[1]);
- quicksort(flouPrint[0], 0, *flouPrint[1] - 1);
- printArr(flouPrint[0], *flouPrint[1]);
- LeaveCriticalSection(§ion);
- }
- DWORD WINAPI ThreadSort(LPVOID lpParam) {
- cout << "__ThreadRunningSort__" << endl;
- cs();
- cout << "__________potok Sort stoped________" << endl;
- return 0;
- }
- void CreateThread_S(int* flouPrint, int Npr) {
- //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Thread
- HANDLE hThread_mass_sort;
- DWORD ThreadIDs;
- hThread_mass_sort = CreateThread(
- NULL,
- 0,
- ThreadSort,
- flouPrint // massiv parametrov
- //0 // bez peredechiapram
- ,
- CREATE_SUSPENDED,
- &ThreadIDs
- );
- if (hThread_mass_sort == NULL) {
- cout << "Thread failed" << GetLastError() << endl;
- }
- //zadat prioritet
- SetThreadPriority(hThread_mass_sort, Npr); //THREAD_PRIORITY_NORMAL = 0
- cout << "PriorytetS hThread_mass_sort = " << GetThreadPriority(hThread_mass_sort) << endl;
- cout << "Thread Creation Success" << endl;
- ResumeThread(hThread_mass_sort);/// zapusk potoka
- cout << "ThreadID -->" << ThreadIDs << endl;
- // WaitForSingleObject(hThread_mass_sort, INFINITE);
- // DeleteCriticalSection(§ion);
- CloseHandle(hThread_mass_sort);
- }
- DWORD WINAPI ThreadPrint(LPVOID lpParam) {
- cout << "__ThreadRunningPrint__" << endl;
- cs();
- cout << "__________potok Print stoped________" << endl;
- return 0;
- }
- //\\\\\\\\\\\\/Thread
- void CreateThread_P(int* flouPrint, int Npr) {
- //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Thread
- HANDLE hThread_mass_print;
- //InitializeCriticalSection(§ion);
- DWORD ThreadIDp;
- hThread_mass_print = CreateThread(
- NULL,
- 0,
- ThreadPrint,
- flouPrint // massiv parametrov
- //0 // bez peredechiapram
- ,
- CREATE_SUSPENDED,
- &ThreadIDp
- );
- if (hThread_mass_print == NULL) {
- cout << "Thread failed" << GetLastError() << endl;
- }
- //zadat prioritet
- SetThreadPriority(hThread_mass_print, Npr); //THREAD_PRIORITY_NORMAL = 0
- cout << "PriorytetP hThread_mass_print = " << GetThreadPriority(hThread_mass_print) << endl;
- cout << "Thread Creation Success" << endl;
- ResumeThread(hThread_mass_print);/// zapusk potoka
- cout << "ThreadID -->" << ThreadIDp << endl;
- WaitForSingleObject(hThread_mass_print, INFINITE);
- DeleteCriticalSection(§ion);
- CloseHandle(hThread_mass_print);
- }
- int main()
- {
- setlocale(LC_ALL, "ru");
- int size = 100;
- int* arr = new int[size];
- flouPrint[0] = arr;
- flouPrint[1] = &size;
- InitializeCriticalSection(§ion);
- CreateThread_S(*flouPrint, 0);
- CreateThread_P(*flouPrint, 0);
- CreateThread_P(*flouPrint, 0);
- // Sleep(2000);
- return 1;
- }
- // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
- // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
- // Советы по началу работы
- // 1. В окне обозревателя решений можно добавлять файлы и управлять ими.
- // 2. В окне Team Explorer можно подключиться к системе управления версиями.
- // 3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
- // 4. В окне "Список ошибок" можно просматривать ошибки.
- // 5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
- // 6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
Add Comment
Please, Sign In to add comment