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

Страницы работы

8 страниц (Word-файл)

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО

Факультет автоматизированных и информационных систем

Кафедра «Информационные технологии»

ОТЧЕТ   ПО   ЛАБОРАТОРНОЙ   РАБОТЕ   № 7

по дисциплине «Мультипрограммная и мультипроцессорная обработка

данных»

на тему:     «Взаимодействие между приложениями»

Выполнила:  студент гр. ИТ-32

                                                                                               

Принял: преподаватель

                                    А

Дата сдачи отчета:         _____________________

Дата допуска к защите: _____________________

Дата защиты:                  _____________________

Гомель 2013

ЛАБОРАТОРНАЯ РАБОТА №7

Взаимодействие между приложениями

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

Задания:

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

Листинг программы:

Main.cpp

using namespace std;

static int **a,**b,**c;

static int razm[2];//Размерности квадратных матриц

HANDLE hThread1,hThread2,hThread3;

DWORD WINAPI ObrabBuffer(void *param);

DWORD WINAPI MultiplyMatrix(void* p);

typedef struct dannie

{har *file;//имя файла

int n;//номер матрицы 

}Dannie,*dan;

int main(int argc, char *argv[])

{setlocale(LC_CTYPE,"Russian");

Dannie dan1;

dan1.file="1.txt";

dan1.n=0;

hThread1=CreateThread(NULL,0,ObrabBuffer,&dan1,0,NULL);

Dannie dan2;

dan2.file="2.txt";

dan2.n=1;

hThread2=CreateThread(NULL,0,ObrabBuffer,&dan2,0,NULL);

WaitForSingleObject(hThread1,INFINITE);             

WaitForSingleObject(hThread2,INFINITE);             

printf("Файлы считаны успешно.\n\n");

for(int i=0;i<razm[0];i++)

{

printf("\n");

for(int j=0;j<razm[0];j++)

printf(" %d",a[i][j]);

}

printf("\n");

for(int i=0;i<razm[0];i++)

{printf("\n");

for(int j=0;j<razm[0];j++)

printf(" %d",b[i][j]);

}

printf("\nВычисление произведения матриц\n");

hThread3=CreateThread(NULL,0,MultiplyMatrix,NULL,0,NULL);

WaitForSingleObject(hThread3,INFINITE);

printf("\nПроизведения матриц=\n");

for(int i=0;i<razm[0];i++)

{for(int j=0;j<razm[0];j++)

printf(" %d",c[i][j]);

printf("\n");   

}

void *pMapping;//указатель на память

HANDLE hMapping=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,sizeof(c),"Матрица_С");//создаём проекция

if(hMapping!=NULL)

{         pMapping=MapViewOfFile(hMapping,FILE_MAP_WRITE,0,0,0);

//заполняем  память данными  for (p=(int*)pMapping,i=0; i<256; i++) *p++=i;

int *p;

p=(int*)pMapping;

for(int i=0;i<razm[0];i++)

for(int j=0;j<razm[0];j++)

{

*p=c[i][j];

*p++;  //Увеличиваем именно адрес (звёздочка) а не значение       

}

//Создаём и заполняем структуры

STARTUPINFO si;

PROCESS_INFORMATION pi;

memset(&si,0,sizeof(si));

memset(&pi,0,sizeof(pi));

si.cb=sizeof(si);

CreateProcess("sec.exe",0,0,0,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);

printf("\nЗапущенно 2-ое приложение\n");

WaitForSingleObject(pi.hProcess,INFINITE);

CloseHandle(pi.hProcess);

printf("Второе приложение завершилось\n");

}

else

printf("\nОшибка при создании проекции файла\n");   

system("PAUSE");

UnmapViewOfFile( hMapping );

CloseHandle( hMapping );

CloseHandle(hThread1);

CloseHandle(hThread2);

CloseHandle(hThread3);

return EXIT_SUCCESS;

}

DWORD WINAPI ObrabBuffer(void *param)//чтение из файлов

{           dan d=(dan)param;

char *fn=d->file;

int nn=d->n;

HANDLE file;//Идентификатор файла

DWORD dw; //Количство прочитаных байт

OVERLAPPED ov;//Структура OVERLAPPED

char buf[500];//Буффер для чтения из файлов

//Описываем файлы

file=CreateFile(fn,FILE_READ_DATA,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_FLAG_OVERLAPPED,NULL);

if(file==INVALID_HANDLE_VALUE)

{MessageBox(NULL,"Ошибка чтения файла!",0,MB_OK);}

else

{//Описываем структуру OVERLAPPED

ZeroMemory(&ov,sizeof(OVERLAPPED));

ov.Offset=0;

ov.hEvent=CreateEvent(NULL,TRUE,FALSE,0);

//Очищаем буфер для чтения из файла

ZeroMemory(&buf,sizeof(buf));

if(ReadFile(file,buf,sizeof(buf),&dw,&ov)|| GetLastError()==ERROR_IO_PENDING)

{//Обрабатываем данные прочитанные из файла

razm[nn]=atoi(&buf[0]);//Читаем размерность матрицы

//Создаём матрицу

if(nn==0)

{a=new int* [razm[nn]];

for(int i=0;i<razm[nn];i++)

a[i]=new int[razm[nn]];

}

else

{                  b=new int* [razm[nn]];    

for(int i=0;i<razm[nn];i++)

b[i]=new int[razm[nn]];

}

Похожие материалы

Информация о работе