Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Процеси та потоки

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Системне програмування

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  Кафедра ЕОМ Звіт до лабораторної роботи № 1 з дисципліни " Системне програмування " на тему: «Процеси та потоки» Мета: Засвоїти поняття «процесів» та «потоків» як основних компонентів сучасних операційних систем. Здобути навики створення, керування та знищення «процесів» та «потоків» в операційній системі Windows. Варіант 2 Розробити програму в середовищі Visual Studio, що демонструє використання системних викликів, відзначених символом “+”, відповідно до варіанту (таблиця 4). Написати функцію потоку, яка як вхідний параметр приймає дескриптор відкритого текстового файлу. Функція повинна здійснювати посимвольне виведення у файл номер процесу, номер потоку та системний час. Передбачити достатню кількість ітерації запису в файл з одної функції потоку. Відкриття файлу слід виконувати до створення потоку, використовуючи функцію FileOpen(), а після завершення роботи з файлом слід викликати функцію FileClose(). Щоб продемонструвати паралельне виконання створеного потоку з первинним потоком процесу, в цикл запису з файлу потрібно додати виклик Sleep(Num), де Num – час в мілісекундах, на яке слід призупинити виконання потоку. Затримку також можна організувати за допомогою лічильника до якогось досить великого числа. Код програми #include "func.h" HANDLE hndl = GetStdHandle(STD_OUTPUT_HANDLE); void ProcessExample(){ SetConsoleTextAttribute(hndl, FOREGROUND_GREEN); printf("~~~~~~~~~~ Process Example ~~~~~~~~~~~\n"); SetConsoleTextAttribute(hndl, FOREGROUND_INTENSITY); printf("ShellExecute"); HINSTANCE hInst = (HINSTANCE)ShellExecuteA(0, "open", "C:\\Windows\\write.exe", "C:\\example.txt", 0, SW_SHOW); if ((int)hInst < 31) printf(" failed\n"); else SetConsoleTextAttribute(hndl, FOREGROUND_BLUE); printf(" ok\n"); SetConsoleTextAttribute(hndl, FOREGROUND_INTENSITY); printf("CreateProcess paint"); STARTUPINFO si; PROCESS_INFORMATION pi; DWORD code; ZeroMemory(&pi, sizeof(pi)); ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); if (!CreateProcess (L"c:\\windows\\system32\\mspaint.exe", NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi) ) printf(" failed\n"); else SetConsoleTextAttribute(hndl, FOREGROUND_BLUE); printf(" ok\n"); SetConsoleTextAttribute(hndl, FOREGROUND_INTENSITY); printf("OpenProcess"); HANDLE hMyProc = OpenProcess(PROCESS_ALL_ACCESS, 0, pi.dwProcessId); if (hMyProc == INVALID_HANDLE_VALUE) printf(" failed\n"); else SetConsoleTextAttribute(hndl, FOREGROUND_BLUE); printf(" ok\n"); SetConsoleTextAttribute(hndl, FOREGROUND_INTENSITY); printf("GetExitCodeProcess"); if (!(GetExitCodeProcess(pi.hProcess, &code))) { printf("GetExitCodeProcess() failed: %d\n", GetLastError()); } else SetConsoleTextAttribute(hndl, FOREGROUND_BLUE); printf(" ok %d \n", code); TerminateProcess(pi.hProcess, 0); SetConsoleTextAttribute(hndl, FOREGROUND_INTENSITY); printf("TerminateProcess "); SetConsoleTextAttribute(hndl, FOREGROUND_BLUE); printf("ok"); SetConsoleTextAttribute(hndl, FOREGROUND_INTENSITY); printf("SetPriorityClass to idle"); if (SetPriorityClass(hMyProc, IDLE_PRIORITY_CLASS)){ SetConsoleTextAttribute(hndl, FOREGROUND_BLUE); printf(" ok\n"); } else printf(" failed\n"); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } static unsigned _stdcall ThreadFunc(void* File) { HANDLE hFile = File; DWORD WrittenBytes; while (1) { WriteFile(hFile, "+", 1, &WrittenBytes, 0); } return 0; } void ThreadExample() { SetConsoleTextAttribute(hndl, FOREGROUND_GREEN); printf("~~~~~~~~~~~~Thread Example~~~~~~~~~~~~\n"); unsigned ThreadId; LPDWORD ThreadExCode = new DWORD; HANDLE hMyThread; HFILE hFile; DWORD WrittenBytes; hFile = (HFILE)CreateFile(L"D:\\nlab1.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); SetConsoleTextAttribute(hndl, FOREGROUND_INTENSIT...
Антиботан аватар за замовчуванням

09.02.2017 02:02

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини