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

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

Читайте также:
  1. Аудиторна та позааудиторна виховна робота.
  2. Безпека при вантажно-розвантажувальних роботах
  3. ВИКИДИ ПИЛУ ПРИ АВТОТРАНСПОРТНИХ РОБОТАХ В КАР´ЄРІ
  4. ВИКИДИ ПРИ БУРОВИХ РОБОТАХ
  5. ВИКИДИ ПРИ ВИЇМКОВО-НАВАНТАЖУВАЛЬНИХ РОБОТАХ
  6. Використання сортування, фільтрація даних, робота з підсумками.
  7. Глава V. ЛАБОРАТОРНАЯ ДИАГНОСТИКА ИНФЕКЦИОННЫХ И ПАРАЗИТАРНЫХ ЗАБОЛЕВАНИЙ

Тема: Практична реалізація багатопотоковості

Завдання:

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

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

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

Синхронізація потоків, які виконуються в різних процесах за допомогою м’ютекса

CreateMutex.cpp

#include <windows.h>

#include <iostream.h>

 

int main()

{

HANDLE hMutex;

char lpszAppName[] = "C:\\ConsoleProcess.exe";

STARTUPINFO si;

PROCESS_INFORMATION pi;

 

// создаем мьютекс

hMutex = CreateMutex(NULL, FALSE, "DemoMutex");

if (hMutex == NULL)

{

cout << "Create mutex failed." << endl;

cout << "Press any key to exit." << endl;

cin.get();

 

return GetLastError();

}

 

ZeroMemory(&si, sizeof(STARTUPINFO));

si.cb = sizeof(STARTUPINFO);

 

// создаем новый консольный процесс

if (!CreateProcess(lpszAppName, NULL, NULL, NULL, FALSE,

NULL, NULL, NULL, &si, &pi))

{

cout << "The new process is not created." << endl;

cout << "Press any key to exit." << endl;

cin.get();

 

return GetLastError();

}

 

// выводим на экран строки

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

{

// захватываем мьютекс

WaitForSingleObject(hMutex, INFINITE);

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

{

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

Sleep(10);

}

cout << endl;

// освобождаем мьютекс

ReleaseMutex(hMutex);

}

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

CloseHandle(hMutex);

 

// ждем пока дочерний процесс закончит работу

WaitForSingleObject(pi.hProcess, INFINITE);

 

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

CloseHandle(pi.hThread);

CloseHandle(pi.hProcess);

 

return 0;

}

 

ConsoleProcess.cpp

#include <windows.h>

#include <iostream.h>

 

int main()

{

HANDLE hMutex;

int i,j;

 

// открываем мьютекс

hMutex = OpenMutex(SYNCHRONIZE, FALSE, "DemoMutex");

if (hMutex == NULL)

{

cout << "Open mutex failed." << endl;

cout << "Press any key to exit." << endl;

cin.get();

 

return GetLastError();

}

 

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

{

// захватываем мьютекс

WaitForSingleObject(hMutex, INFINITE);

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

{

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

Sleep(5);

}

cout << endl;

// освобождаем мьютекс

ReleaseMutex(hMutex);

}

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

CloseHandle(hMutex);

 

return 0;

}

Лабораторна робота 4

Тема: Керування оперативною пам’яттю

Завдання:

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

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

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

 


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


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

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