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

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

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

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

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

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

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

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

ОТЧЕТ   ПО   ЛАБОРАТОРНОЙ   РАБОТЕ   № 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]];

}

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

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