Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Теоретичні відомості. Лабораторна робота № 3.

Читайте также:
  1. I. Теоретичні відомості
  2. І. Теоретичні відомості
  3. І. Теоретичні відомості
  4. І. Теоретичні відомості
  5. І. Теоретичні відомості
  6. І. Теоретичні відомості
  7. І. Теоретичні відомості

Лабораторна робота № 3.

Тема: Управління потоками та процесами у Windows.

Мета: Ознайомитись з основними АРІ-функціями для управління потоками та процесами.

Теоретичні відомості.

Основні функції WinAPI, котрі використовуються для роботи з процесами та потоками:

1. CreateProcess – створення процесу.

2. TerminateProcess – завершення процесу.

3. CreateThread – створення потоку.

4. WaitForSingleObject – очікування завершення роботи потоку.

Cтворення процесу здійснюється за допомогою функції CreateProcess:

 

BOOL CreateProcess( LPCTSTR lpApplicationName, // ​​ім'я виконуваного модуля LPTSTR lpCommandLine, // ​​параметри командного рядка LPSECURITY_ATTRIBUTES lpProcessAttr, // захист процесу LPSECURITY_ATTRIBUTES lpThreadAttr, // захист основного потоку процесу BOOL bInheritHandles, // ​​чи наслідуються властивості батьківського процесу DWORD dwCreationFlags, // параметри процесу LPVOID lpEnvironment, // ​​параметри середовища LPCTSTR lpCurrentDirectory, // ​​поточний диск або каталог LPSTARTUPINFO lpStartupInfo, // ​​початкові параметри процесу LPPROCESS_INFORMATION lpProcessInformation // інформація про процес );

В результаті успішного виконання функція поверне TRUE. У разі невдачі - FALSE.

 

Параметри:

pApplicationName – шлях до програми, яку потрібно запустити.

 

lpCommandLine - тут передаються параметри командного рядка (за потребою, якщо запускається консольна програма). Якщо не використовується, то пишемо NULL.

 

lpProcessAttributes - атрибути захисту для програми. Якщо вказати NULL то система зробить це за замовчуванням.

 

 

lpThreadAttributes - атрибути захисту для першого потоку програми. Якщо вказати NULL то система зробить це за замовчуванням.

 

bInheritHandles – параметр, який вказує, чи успадковується дескриптор батьківського процесу. TRUE – успадковується, FALSE – ні.

 

dwCreationFlags – задає параметри створення процесу і пріоритет процесу. Основні значення:

CREATE_NEW_CONSOLE новий процес відкривається у новому консольному вікні.
HIGH_PRIORITY_CLASS процес є критичним для системи
IDLE_PRIORITY_CLASS процес працює у фоновому режимі
NORMAL_PRIORITY_CLASS стандартний пріоритет
REALTIME_PRIORITY_CLASS найвищий пріоритет (пріоритет реального часу)

 

lpEnvironment - вказує на параметри середовища. Якщо NULL, то буде використано параметри батьківського процесу.

 

lpCurrentDirectory - визначає поточний диск і каталог. Якщо NULL то буде використаний диск і каталог батьківського процесу.

 

lpStartupInfo - використовується для налаштування властивостей процесу, наприклад розташування вікон і заголовок.

Структура повинна бути правильно ініціалізована:

STARTUPINFO sti; // структура

ZeroMemory(&sti, sizeof(STARTUPINFO));//обнулити всі поля структури

sti.cb = sizeof (STARTUPINFO); // визначити розмір структури

 

lpProcessInformation - структура PROCESS_INFORMATION з інформацією про процес. Буде заповнена операційною системою Windows.

 

 

Один процес може завершити другий процес за допомогою виклику функції TerminateProcess, яка має наступний прототип:

 

  BOOL TerminateProcess ( HANDLE hProcess, //дескриптор процесу UINT uExitCode // код завершення процесу );

 

Якщо функція TerminateProcess виконалася успішно, то вона повертає значення дорівнює TRUE. В іншому випадку повертається значення одно FALSE.

Функція TerminateProcess завершує роботу процесу, але не звільняє всі ресурси, що належать цьому процесу. Тому ця функція повинна викликатися тільки в аварійних ситуаціях при зависанні процесу.

 

 

Потік створюється функцією CreateThread, яка має наступний прототип:

HANDLE CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, // ​​атрибути захисту DWORD dwStackSize, // ​​розмір стека потоку в байтах LPTHREAD_START_ROUTINE lpStartAddress, // адреса виконуваної функції LPVOID lpParameter, // адреса параметра DWORD dwCreationFlags, // ​​прапори створення потоку LPDWORD lpThreadId // ідентифікатор потоку );

 

При успішному завершенні функція CreateThread повертає дескриптор створеного потоку і його ідентифікатор, який є унікальним для всієї системи. У випадку невдачі ця функція повертає значення NULL.

 

Призначення параметрів функції CreateThread:

lpThreadAttributes - встановлює атрибути захисту створюваного потоку. Встановлюємо значення цього параметра в NULL. Це означає, що атрибути захисту потоку збігаються з атрибутами захисту батьківського процесу.

dwStackSize - визначає розмір стека, який виділяється потоку при запуску. Якщо цей параметр дорівнює нулю, то потоку виділяється стек, розмір якого дорівнює за замовчуванням 1 Мб. Це найменший розмір стека, який може бути виділений потоку. Якщо величина параметра dwStackSize менше значення, заданого за замовчуванням, то все одно потоку виділяється стек розмірів в 1Мб. Операційна система Windows округлює розмір стека до однієї сторінки пам'яті, що звичайно дорівнює 4 Кб.

 

lpStartAddress – вказує на виконувану потоком функцію. Ця функція повинна мати наступний прототип:

DWORD WINAPI ThreadProc (LPVOID lpParameters);

Параметр lpParameter є єдиним параметром, який передається функції потоку.

dwCreationFlags - визначає, в якому стані буде створений потік. Якщо значення цього параметра дорівнює 0, то функція потоку починає виконуватися відразу після створення потоку. Якщо ж значення цього параметра встановлено CREATE_SUSPENDED, то потік створюється в підвішеному стані. Надалі цей потік можна запустити викликом функції ResumeThread.

lpThreadId - є вихідним параметром, тобто його значення встановлює Windows. Цей параметр повинен вказувати на змінну, в яку Windows помістить ідентифікатор потоку, який унікальний для всієї системи і може надалі використовуватися для посилань на потік.

 

 

Для очікування завершення роботи потоку використовується функція:

 

  DWORD WaitForSingleObject( HANDLE hHandle, // дескриптор потоку DWORD dwMilliseconds // інтервал очікування в мілісекундах );  

 

Ця функція очікує завершення потоку встановлену кількість мілісекунд, коли час закінчиться – основна програма буде виконуватись далі. Якщо другий параметр встановити рівним INFINITE, то чекаємо, поки потік не завершиться самостійно.

Наведемо приклад програми, яка використовує функцію CreateThread для створення потоку, і продемонструємо спосіб передачі параметрів до виконуваної потоком функції.

Постановка задачі:

Використовуючи АРІ-функції реалізувати наступні задачі для роботи з процесами та потоками:

1. Робота з процесами:

1) Запустити програму notepad з високим пріоритетом.

2) Завершити виконання програми через 10 секунд.

2. Робота з потоками:

1) Написати програму для одночасного опрацювання масиву двома потоками. Перший потік знаходитиме максимальний елемент масиву, другий - середнє арифметичне елементів масиву.

 

 


Дата добавления: 2015-10-02; просмотров: 64 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
дебиеттер| Хід виконання роботи.

mybiblioteka.su - 2015-2024 год. (0.009 сек.)