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

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

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

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

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Кафедра ЕОМ Звіт до лабораторної роботи № 1 з дисципліни " Системне програмування " Мета: Засвоїти поняття «процесів» та «потоків» як основних компонентів сучасних операційних систем. Здобути навики створення, керування та знищення «процесів» та «потоків» в операційній системі Windows. Варіант 2 Розробити програму в середовищі Visual Studio, що демонструє використання системних викликів, відзначених символом “+”, відповідно до варіанту.  Написати функцію потоку, яка як вхідний параметр приймає дескриптор відкритого текстового файлу. Функція повинна здійснювати посимвольне виведення у файл номер процесу, номер потоку та системний час. Передбачити достатню кількість ітерації запису в файл з одної функції потоку. Відкриття файлу слід виконувати до створення потоку, використовуючи функцію FileOpen(), а після завершення роботи з файлом слід викликати функцію FileClose(). Продемонструвати паралельне виконання створеного потоку з первинним потоком процесу. #include<Windows.h> #include<process.h> #include<iostream> usingnamespace std; unsigned__stdcall ThreadFunc(void* ); staticunsigned_stdcallFileOut(void * File); void ProcessAndThred(); int main() { ProcessAndThred(); HANDLE hFile; TCHAR stdPath[30] = TEXT("D:\\test.txt"); hFile = CreateFile(stdPath,GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,OPEN_ALWAYS,0,0); unsigned ThreadId; HANDLE h_thread; h_thread = (HANDLE) _beginthreadex (NULL,0,FileOut,hFile, 0, &ThreadId); DWORD WrittenBytes; for(int i=0;i!=10;i++) { WriteFile(hFile,"&",3,&WrittenBytes,0); Sleep(100); } if(h_thread==INVALID_HANDLE_VALUE) cout<<"Create a new thread is failed"; else cout<<"Create a new thread is OK","OK"; CloseHandle(hFile); TerminateThread(h_thread,0); return 0; } unsigned__stdcallThreadFunc(void* arg) { _endthreadex(0); return 0 ; } staticunsigned_stdcallFileOut(void * File) { HANDLE hFile = File; char buff[100]; unsignedint ProcessId = GetCurrentProcessId(); unsignedint ThreadId = GetCurrentThreadId(); SYSTEMTIME SysTime; GetSystemTime(&SysTime); sprintf(buff,"ProcessId - %d\r\nThreadId - %d\r\nSystemTime - %d : %d : %d\r\n", ProcessId,ThreadId,SysTime.wHour,SysTime.wMinute,SysTime.wSecond); int size=sizeof(buff); DWORD WrittenBytes; for(int i=0;buff[i]!=0;i++) { WriteFile(hFile,&buff[i],1,&WrittenBytes,0); } return 0; } void ProcessAndThred() { bool SetClass; unsigned ThreadId; // ідентифікатор потоку HANDLE hThread; // дескриптор потоку int i = 0; // передаване число DWORD SetPriority; HANDLE hProc = NULL; STARTUPINFO cif; ZeroMemory(&cif,sizeof(STARTUPINFO)); PROCESS_INFORMATION pi; // ShellExecute HINSTANCE hInst = ShellExecuteW(NULL, L"open", // Operation to perform L"c:\\windows\\regedit.exe", // Application name NULL, // Additional parameters NULL, // Default directory SW_SHOW); if(reinterpret_cast<int>(hInst) > 32) cout<<"ShellExecute Start Sucess"<<endl; else cout<<"ShellExecute don`t Start Sucess"<<endl; // CreateProcess if (CreateProcess(L"c:\\windows\\notepad.exe",NULL, NULL,NULL,FALSE,NULL,NULL,NULL ,&cif,&pi)==TRUE) cout<<"Create Process Start Sucess"<<endl; else cout<<"Erorr Create Process"<<endl; //OpenProcess hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pi.dwProcessId); if(hProc==INVALID_HANDLE_VALUE) cout<<"Open Process is failed"<<endl; else cout<<"Open Process is OK"<<endl; // SetPriorityClass SetPriority = SetPriorityClass(hProc,NORMAL_PRIORITY_CLASS); cout<<" Priority Class is "<<SetPriority<<endl; //GetExitCodeProcess DWORD ExitCode1 = 0; GetExitCodeProcess(hProc, &ExitCode1); if(ExitCode1 == STILL_ACTIVE) cout<<"Process is alive"<<endl; else cout<<"Process is dead"<<endl; //begintjreadex hThread =(HANDLE)_beginthreadex(NULL, 0,&ThreadFunc, &i,0,&ThreadId); if(hThread==INVALID_HANDLE_VALUE) cout<<"_beginthread is failed"<<endl; else cout<<"_beginthread is OK"<<endl; //GetExitCodeThred DWORD ExitCode = 0; GetExitCodeThread (hThread, &ExitCode); if((ExitCode == STILL_ACTIVE)) cout<<"Thered is alive"<<endl; else cout<<"Thread is dead"<<endl; //GetThreadPriority int get = GetThreadPriority (hThread); cout<<endl<<"Thread priorety is "<<get<<endl; //SetThreadPriority SetClass = SetThreadPriority(hThread,THREAD_PRIORITY_LOWEST); if(SetClass) cout<<"Thread Priorety is change ok"<<endl; else cout<<"Can`t change Thread Priorety "<<endl; //TerminateProcess if(TerminateProcess(pi.hProcess,NO_ERROR)) cout<<"TerminateProcess is OK"<<endl; else cout<<"TerminateProcess is failed"<<endl; //CloseHandle CloseHandle(pi.hThread); CloseHandle(pi.hProcess); } Результат виконання / Рис.1 / Рис.2(текстовий файл) Висновок:Засвоїв поняття «процесів» та «потоків» як основних компонентів сучасних операційних систем. Здобув навики створення, керування та знищення «процесів» та «потоків» в операційній системі Windows.
Антиботан аватар за замовчуванням

19.11.2013 20:11-

Коментарі

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

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!