Читайте также:
|
|
Лабораторна робота 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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Задание 28 | | | Лабораторна робота 3 |