Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364150
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62792)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21320)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21697)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8694)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3463)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20645)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Лабораторная работа: Процессы и потоки

Название: Процессы и потоки
Раздел: Рефераты по информатике, программированию
Тип: лабораторная работа Добавлен 14:29:18 30 марта 2011 Похожие работы
Просмотров: 73 Комментариев: 2 Оценило: 0 человек Средний балл: 0 Оценка: неизвестно     Скачать

Міністерство освіти і науки України

Житомирський державний технологічний університет

ФІКТ

Кафедра ПЗОТ

Група ПІ-39

Лабораторная робота №8

по курсу

Системное программирование

на тему

Процессы и потоки

г. Житомир

2011 р.

Задание

Необходимо написать две программы, которые будут иметь общие данные.

Существует несколько механизмов реализации общего доступа к данным разных процессов. Воспользуемся одним из них, наиболее удобным – проецированием файла в память. Одна программа будет сортировать данные в файле, а другая отображать содержимое этого файла. Работать оба процесса будут одновременно.

программа массив процесс

Ход работы

Создайте файл data.dat. В нем записаны числа, сгенерированные случайным образом. Количество чисел – 20-30 штук. Диапазон значений:от 10 до 100. (Это именно числа, а не символьные строки хранящие ASCII коды цифр!!!)

Программа №1. «Сортировка данных»

1. Берем за основу программу лаб.раб №4.

2. Включаем обработку события нажатия клавиши, и отслеживаем в нем нажатие пробела. Если пользователь нажал пробел, значит начинаем сортировку данных.

3. Выполняем проецирование файла в память. Используем для этого созданный файл data.dat. В результате получим доступ к данным как к обычному одномерному массиву.

4. Выполняем сортировку массива, любым из методов сортировки. Вставьте 1-но секундную задержку для каждой итерации сортировки массива, это позволит потом наглядней увидеть процесс сортировки.

5. По окончанию сортировки, программа выводит в окно, строку «Работа завершена».

Программа №1. «Вывод файла данных в окно»

1. Берем за основу программу лаб.раб №4.

2. Выполняем проецирование файла в память. Используем для этого созданный файл data.dat. В результате получим доступ к данным как к обычному одномерному массиву. Этот же файл проецирует в память предыдущая программа.

3. Создаем таймер на 0.5 секунды. При получении сообщения от таймера, выполняем вывод всего массива в окно. Предусмотрите корректный перевывод данных в окно, без наложений. В окно выводим не числа из массива, а строки одного и того же символа, например «*», в количестве равном числу из массива.

Запускаем на выполнение обе программы одновременно. Когда вторая программа запустилась и выполняет вывод данных в окно (выводит пока одну и туже картинку каждые пол секунды), нажимаем пробел в первой программе и она начинает сортировать массив. При этом, так как они данные берут из одного и того же файла (обе проецировали его себе в память), то первая вносит изменения переставляя данные при сортировке, а вторая выводит из себе в окно и мы видим ход процесса сортировки. Временную задержку в первой программе можно при надобности увеличить.

Эти две программы демонстрируют возможность организации общего доступа процессов к одним и тем же данным. Так же демонстрируется механизм проецирования файла в память, как один из наилучших методов доступа к файлу.

Код програм мы

Програма №1

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

HANDLE FileMappingHandle, FileHandle, MutexHandle;

HINSTANCE exec;

int* Image;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static char szAppName[] = "FileImageViewer" ;

HWND hwnd ;

MSG msg ;

WNDCLASSEX wndclass ;

wndclass.cbSize = sizeof (wndclass) ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = NULL ;

wndclass.lpszClassName = szAppName ;

wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;

RegisterClassEx (&wndclass) ;

hwnd = CreateWindow (szAppName,

"FileImageViewer",

WS_OVERLAPPEDWINDOW,

200,

10,

CW_USEDEFAULT,

CW_USEDEFAULT,

NULL,

NULL,

hInstance,

NULL) ;

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

return msg.wParam ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

HDC hdc ;

PAINTSTRUCT ps ;

RECT rect ;

switch (iMsg)

{

int i;

case WM_CREATE:

FileHandle=CreateFile(".\\..\\mass.dat", GENERIC_WRITE|GENERIC_READ,

FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL, NULL);

if(FileHandle==NULL)

{

MessageBox(hwnd, "Невозможно открыть файл", "Ошибка", MB_ICONWARNING);

exit(1);

}

srand((unsigned)time(NULL));

str="";

buf.push_back(str);

int t[26];

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

{

t[i]=rand()%100;

if(t[i]<10)

t[i]+=10;

}

unsigned long z;

exec=ShellExecute(hwnd, NULL, ".\\..\\SysLab8_2\\Debug\\SysLab8_2.exe", NULL,

".\\SysLab8_2\\Debug\\", SW_SHOWNORMAL);

SetTimer(hwnd, NULL, 500, NULL);

WriteFile(FileHandle, t, sizeof(int)*26, &z, NULL);

FileMappingHandle=CreateFileMapping(FileHandle, NULL, PAGE_READWRITE, 0, 0, "mass");

if(FileMappingHandle==NULL)

{

MessageBox(hwnd, "Ошибка создания дескриптора проэцирования", "Ошибка", MB_ICONWARNING);

exit(1);

}

Image=(int*)MapViewOfFile(FileMappingHandle, FILE_MAP_READ, 0, 0, 0);

if(Image==NULL)

{

MessageBox(hwnd, "Ошибка проэцирования файла", "Ошибка", MB_ICONWARNING);

exit(1);

}

MutexHandle=CreateMutex(0,FALSE, "massmutex");

if(MutexHandle==NULL)

{

MessageBox(hwnd, "Невозможно создать мутекс", "Ошибка", MB_ICONWARNING);

exit(1);

}

return 0 ;

case WM_PAINT:

hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

for(i=1; (unsigned)i<(unsigned)buf.size(); i++)

TextOut(hdc, 10, i*15, buf[i].c_str(), buf[i].length());

EndPaint (hwnd, &ps) ;

return 0 ;

case WM_TIMER:

__try

{

WaitForSingleObject(MutexHandle, INFINITE);

buf.clear();

str="";

buf.push_back(str);

for(i=1; i<26; i++)

{

for(int j=0; j<*(Image+i); j++)

str+="*";

buf.push_back(str);

str="";

}

}

__finally

{

ReleaseMutex(MutexHandle);

}

InvalidateRect (hwnd, NULL, TRUE) ;

return 0;

case WM_DESTROY :

UnmapViewOfFile(Image);

CloseHandle(FileHandle);

CloseHandle(MutexHandle);

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;

}

Програма №2

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

HANDLE FileMappingHandle, FileHandle, MutexHandle;

LPVOID Image;

int *a;

std::string str="";

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static char szAppName[] = "FileImageSorter" ;

HWND hwnd ;

MSG msg ;

WNDCLASSEX wndclass ;

wndclass.cbSize = sizeof (wndclass) ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = NULL ;

wndclass.lpszClassName = szAppName ;

wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;

RegisterClassEx (&wndclass) ;

hwnd = CreateWindow (szAppName,

"FileImageSorter",

WS_OVERLAPPEDWINDOW,

10,

10,

170,

80,

NULL,

NULL,

hInstance,

NULL) ;

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

return msg.wParam ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

HDC hdc ;

PAINTSTRUCT ps ;

RECT rect ;

switch (iMsg)

{

case WM_CREATE:

return 0 ;

case WM_PAINT:

hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

TextOut(hdc, 10,10,str.c_str(),str.size());

EndPaint (hwnd, &ps) ;

return 0 ;

case WM_KEYDOWN:

if(wParam==VK_SPACE)

{

FileMappingHandle=OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "mass");

if(FileMappingHandle==NULL)

{

MessageBox(hwnd, "Ошибка создания дескриптора проэцирования", "Ошибка", MB_ICONWARNING);

exit(1);

}

Image=MapViewOfFile(FileMappingHandle, FILE_MAP_WRITE, 0, 0, 0);

if(Image==NULL)

{

MessageBox(hwnd, "Ошибка проэцирования файла", "Ошибка", MB_ICONWARNING);

exit(1);

}

MutexHandle=OpenMutex(MUTEX_ALL_ACCESS, FALSE, "massmutex");

if(MutexHandle==NULL)

{

MessageBox(hwnd, "Невозможно создать мутекс", "Ошибка", MB_ICONWARNING);

exit(1);

}

str="Работа начата...";

InvalidateRect (hwnd, NULL, TRUE) ;

__try

{

a= (int *)Image;

long i, j;

int x;

for( i=1; i < 26; i++)

for( j = 26-1; j > i; j-- )

{

Sleep(200);

__try

{

WaitForSingleObject(MutexHandle, INFINITE);

if ( a[j-1] > a[j] )

{

x=a[j-1];

a[j-1]=a[j];

a[j]=x;

if(i==3)

exit(1);

}

}

__finally

{

ReleaseMutex(MutexHandle);

}

}

}

__finally

{

str="Работа закончена";

UnmapViewOfFile(Image);

CloseHandle(FileHandle);

CloseHandle(MutexHandle);

}

}

InvalidateRect (hwnd, NULL, TRUE) ;

return 0;

case WM_DESTROY:

UnmapViewOfFile(Image);

CloseHandle(FileHandle);

CloseHandle(MutexHandle);

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;

}

Вывод

Следовательно, во время выполнения данной лабораторной работы были получены практические навыки работы с многопоточным программированием. Был создан проект, который включает в себе две программы: одна программа – сортирует массив из файла, а другая выводит на экран содержание этого файла. Обе программы используют один и тот же файл в один момент времени.

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Где скачать еще рефератов? Здесь: letsdoit777.blogspot.com
Евгений07:42:14 19 марта 2016
Кто еще хочет зарабатывать от 9000 рублей в день "Чистых Денег"? Узнайте как: business1777.blogspot.com ! Cпециально для студентов!
10:19:40 29 ноября 2015

Работы, похожие на Лабораторная работа: Процессы и потоки

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

Да, в любом случае.
Да, но только в случае крайней необходимости.
Возможно, в зависимости от цены.
Нет, напишу его сам.
Нет, забью.



Результаты(151307)
Комментарии (1844)
Copyright © 2005-2016 BestReferat.ru bestreferat@mail.ru       реклама на сайте

Рейтинг@Mail.ru