Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МиАПО / SIMC_dorab.doc
Скачиваний:
13
Добавлен:
07.02.2016
Размер:
756.22 Кб
Скачать

2.11.4 Просмотр элементов списка. Сканирование

Доступ к элементу списка определяется ссылкой на него и записью после точки поля, значение которого необходимо программис­ту, например: quelist->first->lq- текущая длина первой очереди в списке очередейquelist,current->first->pr[1]- первый вещественный параметр транзакта, стоящего первым в спискеcurrent.

Ссылка first указывает на голову списка. Для ее продвижения вправо необходимо присвоить:l->first=l->first->sled

Для продвижения ссылки first влево присваивается:l->first=f->first->pred

2.11.5 Списки пользователя. Организация различных дисциплин обслуживания с помощью списков пользователя

Список пользователя создается функцией void newuserlt(plistt& list,alfa name).

При создании список пользователя помещается в системный список списков транзактов userlist.

Функции void inlfifo(plistt)иvoid inllifo(plistt) выводят активный транзакт из спискаcurrentи помещают его в список пользователя соответственно последним или первым в списке.

Пользователь может написать свои функции, упорядочивающие список по какому-либо признаку, например, в порядке возрастания первого целочисленного параметра:

voidinlpi1(plistt lt) {

ptransact t;

outtlist(current);

trans->testprty=false; // !!!

if(lt->first==nil)

inlt(lt,trans);

else if(lt->first->pi[1] > trans->pi[1])

inlt(lt,trans);

else{

t=lt->first; scanlt(lt);

while(lt->first->pi[1] >= trans->pi[1])

scanlt(lt);

inlt(lt,trans);

lt->first=t;

}

trans=nil;

}

Функция void outuserlt(plistt)помещает транзакт, стоящий первым в списке пользователя в списокcurrent.

Транзакт имеет поле testprty, которое может принимать зна­ченияtrueилиfalse. При выполнении функцииpriority(см. п.2.13.3) транзакты, значение поляtestprtyу которыхtrue, пере­мещаются в списках в соответствии с новым значением приоритета. Если список упорядочивается не по приоритетам, а по какому-либо другому признаку, то перед включением транзакта в список его по­люtestprtyнеобходимо присвоить значениеfalse.

2.12 Модельная среда

2.12.1 Создание модельной среды

Совокупность приборов, очередей, накопителей и других объ­ектов модели представляет собой модельную среду. Для создания модельной среды написаны специальные функции.

Для создания очереди используется функция newqueue(<ссыл­ка на очередь>,<имя>). Ее параметрами являются переменная типа ссылка на очередь и имя очереди из восьми символов. Ссылочная переменная определяется следующим образом:

pqueue q1;

...

newqueue(q1,'q1 ');

Значение q1 устанавливается на созданную очередь.

Создание приборов и накопителей осуществляется аналогичным образом:

pfacility f1;

pstorage st1;

...

newfac(f1,'f1 ');

newstorage(sт1,'sт1 ');

Созданные объекты включаются в системные списки quelist,faclistиstlist. Если пользователю надо поместить объект в ка­кой-либо другой список очередей, приборов или накопителей, необ­ходимо предварительно удалить его из соответствующего системного списка.

Создание гистограмм было рассмотрено выше.

2.12.2 Уничтожение очередей, приборов, накопителей и гистограмм

Объекты, исключенные из списков могут быть уничтожены с помощью функций

void destrs(pstorage&)

void destrf(pfacility&)

void destrq(pqueue&)

void destrh(phistogram&)

при этом выделенная под объект память освобождается.

Пользоваться этими функциями надо осторожно. При уничто­жении прибора или накопителя могут потеряться транзакты, находя­щиеся в их списках (будет выдано соответствующее сообщение об ошибке). Если в ходе моделирования будет обращение к уничтожено­му объекту, то выполнение программы будет прервано.

Соседние файлы в папке МиАПО