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

Приклад синхронізації потоків за допомогою об’єкта CRITICAL_SECTION

Читайте также:
  1. VI. СЕКЦИЯ ГЕОЭКОЛОГИИ И ПРИКЛАДНОЙ ГЕОХИМИИ (ауд. 213, 303, 304)
  2. Вартість основних і прикладних (допоміжних) матеріалів
  3. ВЫСТАВКА-ПРОДАЖА ЖИВОПИСИ, ГРАФИКИ, СКУЛЬПТУРЫ, ФОТОГРАФИИ И ИЗДЕЛИЙ ДЕКОРАТИВНО-ПРИКЛАДНОГО ИСКУССТВА
  4. Доберіть приклад до кожного типу речення.
  5. Допомогою бюджетних видатків
  6. Досвід взаємодії держави й територіальних утворень на прикладі Франції.
  7. За допомогою яких джерел доходів місцевих бюджетів формується загальний фонд?

Лабораторна робота 1

Тема: Процеси і потоки

Завдання:

1.Дослідити роботу програми.

2.Описати документацію на типи даних, структури та функції win32 API, які використовуються в програмі.

3.За завданням викладача розробити власний проект на основі існуючого.

 

Створення процесу в win32 API

#include <windows.h>

#include <iostream.h>

 

int main()

{

STARTUPINFO si;

PROCESS_INFORMATION pi;

 

// заполняем значения структуры STARTUPINFO по умолчанию

ZeroMemory(&si, sizeof(STARTUPINFO));

si.cb = sizeof(STARTUPINFO);

 

// запускаем процесс Notepad

if (!CreateProcess(

NULL, // имя не задаем

"Notepad.exe", // имя программы

NULL, // атрибуты защиты процесса устанавливаем по умолчанию

NULL, // атрибуты защиты первичного потока по умолчанию

FALSE, // дескрипторы текущего процесса не наследуются

0, // по умолчанию NORMAL_PRIORITY_CLASS

NULL, // используем среду окружения вызывающего процесса

NULL, // текущий диск и каталог, как и в вызывающем процессе

&si, // вид главного окна - по умолчанию

&pi // информация о новом процессе

)

)

{

cout << "The mew process is not created." << endl

<< "Check a name of the process." << endl;

return 0;

}

 

Sleep(1000); // немного подождем и закончим свою работу

// закроем дескрипторы запущенного процесса в текущем процессе

CloseHandle(pi.hThread);

CloseHandle(pi.hProcess);

 

return 0;

}

 

Створення потоку в win32 API

 

#include <windows.h>

#include <iostream.h>

 

volatile int n;

 

DWORD WINAPI Add(LPVOID iNum)

{

cout << "Thread is started." << endl;

n += (int)iNum;

cout << "Thread is finished." << endl;

 

return 0;

}

 

int main()

{

int inc = 10;

HANDLE hThread;

DWORD IDThread;

 

cout << "n = " << n << endl;

// запускаем поток Add

hThread = CreateThread(NULL, 0, Add, (void*)inc, 0, &IDThread);

if (hThread == NULL)

return GetLastError();

 

// ждем, пока поток Add закончит работу

WaitForSingleObject(hThread, INFINITE);

// закрываем дескриптор потока Add

CloseHandle(hThread);

 

cout << "n = " << n << endl;

 

return 0;

}

 

Лабораторна робота 2

Тема: Планування і взаємодія процесів і потоків

Завдання:

1.Дослідити роботу програми.

2.Описати документацію на типи даних, структури та функції win32 API, які використовуються в програмі.

3.За завданням викладача розробити власний проект на основі існуючого.

Приклад синхронізації потоків за допомогою об’єкта CRITICAL_SECTION

#include <windows.h>

#include <iostream.h>

 

CRITICAL_SECTION cs;

 

DWORD WINAPI thread(LPVOID)

{

int i,j;

 

for (j = 0; j < 10; ++j)

{

// входим в критическую секцию

EnterCriticalSection (&cs);

for (i = 0; i < 10; ++i)

{

cout << j << ' '<< flush;

Sleep(7);

}

cout << endl;

// выходим из критической секции

LeaveCriticalSection(&cs);

}

 

return 0;

}

 

int main()

{

int i,j;

HANDLE hThread;

DWORD IDThread;

 

// инициализируем критическую секцию

InitializeCriticalSection(&cs);

 

hThread=CreateThread(NULL, 0, thread, NULL, 0, &IDThread);

if (hThread == NULL)

return GetLastError();

 

for (j = 10; j < 20; ++j)

{

// входим в критическую секцию

EnterCriticalSection(&cs);

for (i = 0; i < 10; ++i)

{

cout << j << ' ' << flush;

Sleep(7);

}

cout << endl;

// выходим из критической секции

LeaveCriticalSection(&cs);

}

// ждем, пока поток thread закончит свою работу

WaitForSingleObject(hThread, INFINITE);

// закрываем критическую секцию

DeleteCriticalSection(&cs);

 

return 0;

}


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


Читайте в этой же книге: Функції Win32API для файлових операцій | Тема: Створення та використання DLL | Тема: Мережні засоби операційних систем | Додання елементів в список вибіркового керування доступом (DACL) файла або каталога | Стислі теоретичні відомості | Зміст та порядок виконання роботи | Форма звіту | Лабораторна робота № 3 |
<== предыдущая страница | следующая страница ==>
Задание 28| Лабораторна робота 3

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