Реферат по предмету "Информатика, программирование"


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

Міністерствоосвіти і науки України
Житомирський державний технологічний університет
ФІКТ
КафедраПЗОТ
ГрупаПІ-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
LRESULTCALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
HANDLEFileMappingHandle, FileHandle, MutexHandle;
HINSTANCEexec;
int*Image;
intWINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTRszCmdLine, int iCmdShow)
{
         staticchar szAppName[] = «FileImageViewer» ;
HWNDhwnd ;
MSGmsg ;
WNDCLASSEXwndclass ;
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) ;
}
returnmsg.wParam ;
}
LRESULTCALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
         HDChdc ;
PAINTSTRUCTps ;
RECTrect ;
switch(iMsg)
{
                  inti;
caseWM_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);
                                                                  intt[26];
                                                                  for(i=0;i
                                                                  {
                                                                           t[i]=rand()%100;
                                                                           if(t[i]
                                                                                     t[i]+=10;
                                                                  }
                                                                  unsignedlong 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);
                                                                  }
                                                                  return0 ;
                   caseWM_PAINT:
                                                                  hdc= BeginPaint (hwnd, &ps) ;
                                                                  GetClientRect(hwnd, &rect) ;
                                                                  for(i=1;(unsigned)i
                                                                           TextOut(hdc,10, i*15, buf[i].c_str(), buf[i].length());
                                                                  EndPaint(hwnd, &ps) ;
                                                                  return0 ;
                   caseWM_TIMER:
                                                                  __try
                                                                  {
                                                                           WaitForSingleObject(MutexHandle,INFINITE);
                                                                           buf.clear();
                                                                           str="";
                                                                           buf.push_back(str);
                                                                           for(i=1;i
                                                                           {
                                                                                     for(intj=0; j
                                                                                              str+="*";
                                                                                     buf.push_back(str);
                                                                                     str="";
                                                                           }
                                                                          
                                                                  }
                                                                  __finally
                                                                  {
                                                                           ReleaseMutex(MutexHandle);
                                                                  }
                                                                  InvalidateRect(hwnd, NULL, TRUE) ;
                                                                  return0;
                   caseWM_DESTROY :
                                                                  UnmapViewOfFile(Image);
                                                                  CloseHandle(FileHandle);
                                                                  CloseHandle(MutexHandle);
                                                                  PostQuitMessage(0) ;
                                                                  return0 ;
}
         returnDefWindowProc (hwnd, iMsg, wParam, lParam) ;
}Програма №2
LRESULTCALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
HANDLEFileMappingHandle, FileHandle, MutexHandle;
LPVOIDImage;
int*a;
std::stringstr="";
intWINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTRszCmdLine, int iCmdShow)
{
         staticchar szAppName[] = «FileImageSorter» ;
HWNDhwnd ;
MSGmsg ;
WNDCLASSEXwndclass ;
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) ;
}
returnmsg.wParam ;
}
LRESULTCALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
         HDChdc ;
PAINTSTRUCTps ;
RECTrect ;
switch(iMsg)
{
                   caseWM_CREATE:
                                                                 
                                                                  return0 ;
caseWM_PAINT:
                                                                  hdc= BeginPaint (hwnd, &ps) ;
                                                                  GetClientRect(hwnd, &rect) ;
                                                                  TextOut(hdc,10,10,str.c_str(),str.size());
                                                                  EndPaint(hwnd, &ps) ;
                                                                  return0 ;
                    caseWM_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;
        
                                                                                     longi, j;
                                                                                     intx;
                                                                                     for(i=1; 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) ;
                                                                  return0;
caseWM_DESTROY:
                                                                  UnmapViewOfFile(Image);
                                                                  CloseHandle(FileHandle);
                                                                  CloseHandle(MutexHandle);
                                                                  PostQuitMessage(0) ;
                                                                  return0 ;
}
         returnDefWindowProc (hwnd, iMsg, wParam, lParam) ;
}
Вывод
Следовательно, во времявыполнения данной лабораторной работы были получены практические навыки работыс многопоточным программированием. Был создан проект, который включает в себе двепрограммы: одна программа – сортирует массив из файла, а другая выводит на экрансодержание этого файла. Обе программы используют один и тот же файл в одинмомент времени.


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Смысл названия драмы АН Островского Гроза
Реферат Понятие безработицы и причин её образования
Реферат Приобретение гражданства Российской Федерации
Реферат Преступления против жизни: общая характеристика
Реферат Эпос войны в произведениях Шолохова Судьба человека и Они сражались за Родину
Реферат Принципи державного управління в галузі охорони навколишнього середовища
Реферат Прийняття та зміна Конституції Угорщини
Реферат Преступления против общественной безопасности
Реферат Принцип розподілу влад та його впровадження в Україні
Реферат Производство в суде присяжных
Реферат Принципы административного процесса
Реферат Проблема административно-правовой защиты
Реферат Психология допроса
Реферат Проблемы законодательства РФ о дактилоскопической регистрации и пути его изменения в связи с введением "чиповой системы"
Реферат Проблемы земельного права