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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Кафедра ЕОМ Звіт до лабораторної роботи 1 з дисципліни " Системне програмування "
Мета: Засвоїти поняття «процесів» та «потоків» як основних компонентів сучасних операційних систем. Здобути навики створення, керування та знищення «процесів» та «потоків» в операційній системі Windows. Варіант 2 Розробити програму в середовищі Visual Studio, що демонструє використання системних викликів, відзначених символом “+”, відповідно до варіанту.  Написати функцію потоку, яка як вхідний параметр приймає дескриптор відкритого текстового файлу. Функція повинна здійснювати посимвольне виведення у файл номер процесу, номер потоку та системний час. Передбачити достатню кількість ітерації запису в файл з одної функції потоку. Відкриття файлу слід виконувати до створення потоку, використовуючи функцію FileOpen(), а після завершення роботи з файлом слід викликати функцію FileClose().
Продемонструвати паралельне виконання створеного потоку з первинним потоком процесу.
include include include 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 - %drnThreadId - %drnSystemTime - %d : %d : %drn",
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:windowsregedit.exe",
// Application name
NULL,
// Additional parameters
NULL,
// Default directory
SW_SHOW);
if(reinterpret_cast(hInst) > 32)
cout<<"ShellExecute Start Sucess"<else
cout<<"ShellExecute don`t Start Sucess"<// CreateProcess
if (CreateProcess(L"c:windowsnotepad.exe",NULL,
NULL,NULL,FALSE,NULL,NULL,NULL ,&cif,&pi)==TRUE)
cout<<"Create Process Start Sucess"<else
cout<<"Erorr Create Process"<//OpenProcess
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pi.dwProcessId);
if(hProc==INVALID_HANDLE_VALUE)
cout<<"Open Process is failed"<else
cout<<"Open Process is OK"<// SetPriorityClass
SetPriority = SetPriorityClass(hProc,NORMAL_PRIORITY_CLASS);
cout<<" Priority Class is "<//GetExitCodeProcess
DWORD ExitCode1 = 0;
GetExitCodeProcess(hProc, &ExitCode1);
if(ExitCode1 == STILL_ACTIVE)
cout<<"Process is alive"<else
cout<<"Process is dead"<//begintjreadex
hThread =(HANDLE)_beginthreadex(NULL, 0,&ThreadFunc, &i,0,&ThreadId);
if(hThread==INVALID_HANDLE_VALUE)
cout<<"_beginthread is failed"<else
cout<<"_beginthread is OK"<//GetExitCodeThred
DWORD ExitCode = 0;
GetExitCodeThread (hThread, &ExitCode); if((ExitCode == STILL_ACTIVE)) cout<<"Thered is alive"<//GetThreadPriority
int get = GetThreadPriority (hThread);
cout<//SetThreadPriority
SetClass = SetThreadPriority(hThread,THREAD_PRIORITY_LOWEST);
if(SetClass)
cout<<"Thread Priorety is change ok"<else
cout<<"Can`t change Thread Priorety "<//TerminateProcess
if(TerminateProcess(pi.hProcess,NO_ERROR))
cout<<"TerminateProcess is OK"<else
cout<<"TerminateProcess is failed"<//CloseHandle
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
} Результат виконання / Рис.1
/ Рис.2(текстовий файл)
Висновок:Засвоїв поняття «процесів» та «потоків» як основних компонентів сучасних операційних систем. Здобув навики створення, керування та знищення «процесів» та «потоків» в операційній системі Windows.
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

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

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

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

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

Admin

26.02.2019 12:38

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

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

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

Новини