Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SysSoft.doc
Скачиваний:
523
Добавлен:
16.03.2016
Размер:
4.36 Mб
Скачать

Приложение б Тексты программ комплекса параллельных взаимодействующих приложений

Здесь приведены тексты следующих программ: А, В, Dи G.Эти программы от­ражают алгоритмы взаимодействия, заданные на рис. 6.7. Остальные программы содержат аналогичные алгоритмы взаимодействия.

Текст программы а

#define INCL_BASE

#define INCL_DOS

#include <os2.h>

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#include "progr.h"

#include "func.h"

/*Глобальные переменные*/

char myword[ ]=PROGR_A.EXE";

BYTE atrib[2];

/*Главная функция*/

int main( )

{

/*Локальные переменные*/

int i,j; PipeSize=250; strcpy(Word,myword); atrib[0]=' '; atrib[1]=0x02f;

VioScrollUp(0,0,25,80,25,&atrib,0);

/*Фиксация времени начала процесса*/

DosGetDateTime(&Time);

strcpy(BegTime,itoa(Time.hours,MyBuffer,10));strcat(BegTime,":");

strcat(BegTime,itoa(Time.minutes,MyBuffer,10)); strcat(BegTime,":");

strcat(BegTime,itoa(Time.seconds,MyBuffer,10)); strcat(BegTime,":");

strcat(BegTime,itoa(Time.hundredths,MyBuffer,10));

/*Установка одинакового приоритета всех подпроцессов*/

rc=DosSetPriority(PRTYS_PROCESSTREE,2,10,0);

if(rc!=0) (HaltSystem(“Set Priority",rc); }

/* Создание файла, доступного всем подпроцессам */

rc=DosOpen("result.txt",&FileOpen,&Action,0,0,0x0010|0x0002,0х0002|0х0040|0х4000.0);

if (rc!=0) {HaltSystem(“DosOpen",rc); }

/*Создание семафоров*/

rc=DosCreateEventSem("\\SEM32\\PIPESEM",&PipeSem,DC_SEM_SHARED, 0);

if (rc!=0) {HaltSystem("Create Sem PipeSem",rc); }

rc=DosCreateEventSem("\\SEM32\\EXITSEM", &ExitSem, DC_SEM_SHARED, 0);

if (rc!=0) { HaltSystem("Create Sem (ExtiSem)",rc);}

rс=DosCreateEventSem("\\SEM32\\WRITEFILE", &FileSem, DC_SEM_SHARED, 0);

if (rc!=0) { HaltSystem( "Create Sem (FileSem)",rc);}

rc=DosCreateEventSem("\\SEM32\\POINT2SEM",&Point2Sem, DC_SEM_SHARED, 0);

if (rc!=0) { HaltSystem("Create Sem (Point2Sem)",rc);}

rc=DosCreateEventSem("\\SEM32\\POINT3SEM",&Point3Sem, DC_SEM_SHARED, 0);

if (rc!=0) { HaltSystem("Create Sem (Point3Sem)",rc);}

rc=DosCreateEventSem("\\SEM32\\POINTlSEM",&Point1Sem, DC_SEM_SHARED, 0);

if (rc!=0) { HaltSystem("Create Sem (Point1Sem)",rc);}

rc=DosPostEventSem(PipeSem); if (rc!=0) {HaltSystem(“PostSem (PipeSem)",rc); }

rc=DosPostEventSem(FileSem); if (rc!=0) {HaltSystem(“PostSem (FileSem)",rc); }

/*Создание Pipe (транспортера)*/

rc=DosCreatePipe(&ReadHandle,&WriteHandle,PipeSize);

if (rc!=0) { HaltSystem("Create Pipe",rc);}

/*3адание строк аргументов*/

for (i=0;i<=strlen(myword);i++ ) { Argument[i]=myword[i]; }

j=i; Argument2=itoa(ReadHandle,MyBuffer,10);

for (i=0;i<=strlen(Aгgument2);i++) { Argument[j+1]=MyBuffer[i]; }

j+=1; Argument[j-1]=' ';

Argument2=itoa (WriteHandle, MyBuffer, 10);

for (i=0;i<=strlen(Argument2);i++) { Argument [i+j],MyBuffer[i]; }

j+1; Argument [j-1]=' '; Аrgument2=itoa (FileOpen, MyBuffer, 10);

for (i=0;i<=strlen(Аrgument2);i++) { Argument[i+j],MyBuffer[i]; }

/*Вывод сообщений и выполнение некоторого процесса (цикла)*/

strcpy(Pmessege,"Программа "); strcat(Pmessege,myword);

VioWrtNAttr(&atr,80*25,0,0,0); VioWrtCharStr(PMessege.sizeof(PMessege),2,1,0);

strcpy(Pmessege,"Запущена в "); strcat(Pmessege,BegTime);

VioWrtNAttr(&atr,80*25,0,0,0); VioWrtCharStr(PMessege,sizeof(PMessege),3,1,0);

strcpy(Fmessege1,myword); strcat(Fmessege1," "); strcat (FMessege1,PMessege);

strcpy(Pmessege,"Программой "); strcat(Pmessege," ");

VioWrtNAttr(&atr,80*25,0,0,0); VioWrtCharStr(Pmessege,sizeof(PMessege),4,1,0) ;

strcpy(FMessege2,myword); strcat(FMessege2," "); strcat (FMessege2,PMessege);

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

{ VioWrtNAttr(&atr, 80*25,0,0,0); VioWrtCharStr("|", 1,5,1+i,0);

for (j=0;j<(12500*Speed);j++); }

/*Получение времени загрузки программ потомков*/

DosGetDateTime(&Time);

strcpy(MyTime,itoa(Time.hours,MyBuffer,10)); strcat(MyTime,":");

strcat(MyTime.itoa(Time.minutes,MyBuffer,10)); strcat(MyTime,":");

strcat(MyTime.itoa(Time.seconds,MyBuffer,10)); strcat(MyTime,":");

strcat(MyTime,itoa(Time.hundredths,MyBuffer,10)); strcpy(Inform.LaunchTime,MyTime);

strcpy(Inform.ParentName,myword); Inform.Number=4;

strcpy(PMessege,"Завершена в "); strcat(Pmessege,MyTime);

VioWrtNAttr(&atr,80*25,0,0,0); VioWrtCharStr(PMessege,sizeof(PMessege),6,10);

strcpy(FMessege3,myword); strcat(FMessege3," "); strcat (FMessege3,PMessege);

/*0жидание доступности записи в файл и немедленная запись в файл*/

do{ DosWaitEventSem(FileSem,-1);

rc=DosResetEventSem(FileSem,&BytesWritten);

} while (rc!=0);

DosWrite(FileOpen,(PVOID)&Fmessege1,sizeof(Fmessege1),&BytesWritten);

DosWrite(FileOpen,(PVOID)&FMessege2,sizeof(FMessege2),&BytesWritten);

DosWrite(FileOpen,(PVOID)&FMessege3,sizeof(FMessege3),&BytesWritten);

DosPostEventSem(FileSem);

/*3апись сообщения в Pipe: имя предка и время запуска программ*/

rc=DosWrite(WriteHandle,(PVOID)&Inform,sizeof (Inform), &BytesWritten);

if (rc!=0) { HaltSystem("(DosWrite)",rc); }

/*3апуск программ - потомков*/

rc=DosExecPgm(FailFileb,sizeof(FailFileb),1, Argument, 0,&ResCodeb,"progr_b.exe");

if (rc!=0) { HaltSystem("(DosExecPgm) B",rc);}

rc=DosExecPgm(FailFileb,sizeof (FailFileb),1,Argument, 0, &ResCodeb,"progr_c.exe");

if (rc!=0) { HaltSystem("(DosExecPgm) C",rc);}

rc=DosExecPgm(FalilFileb,spzeof(FailFileb),1,Argument,0, &ResCodeb,"progr_i.exe");

if (rc!=0) { HaltSystem("(DosExecPgm) I",rc);}

rc=DosExecPgm(FailFileb,sizeof(FailFileb),1, Argument,0,&ResCodeb,"progr_j.exe");

if (rc!=0) { HaltSystem("(DosExecPgm) J",rc);}

/*0жидание загрузки семафоров в программах-потомках*/

DosWaitEventSem(ExitSem,-1);

DosCloseEventSem(ExitSem);

return(0);}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]