DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Кафедра ЕОМ Звіт до лабораторної роботи № 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:40

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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