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


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

Міністерствоосвіти і науки України
Житомирський державний технологічний університет
ФІКТ
КафедраПЗОТ
ГрупаПІ-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 мильонов к студенческой карме :

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

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

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

Реферат Stanely Kubrick Essay Research Paper The American
Реферат Механізм нарахування непрямих податків при здійсненні імпортних операцій
Реферат Adolescence Essay Research Paper AdolescenceAdolescence is the
Реферат Основные политико-экономические и исторические данные. Некоторые моменты истории Японии
Реферат Бизнес-план и его финансовые аспекты
Реферат The Destruction Of The Ozone Layer Essay
Реферат Untitled Essay Research Paper Nuclear Weapons explosive
Реферат Economic Development On Americ Essay Research Paper
Реферат The Chinese Ethnic Group Essay Research Paper
Реферат Обеспечение безопасности среды Novell NetWare 5
Реферат The Secret Of The Lottery Essay Research
Реферат Подготовка и начало Второй Мировой войны
Реферат Розвиток економіки та економічної думки в Запорізькій Січі
Реферат В чем Некрасов видит свой долг перед народом и какие задачи ставит перед искусством своего времени
Реферат Аннотация рабочей программы дисциплины физическая и коллоидная химия место дисциплины в структуре ооп