Информатика и технология программирования
с объектами класса OBJ путем
zlist messages; // Сообщения программы
public:
PRG();
~PRG();
void SendEvent(char,int,int,void *);
void run();
};
PRG *OBJ::programm = NULL;
Конструктор связывает объект-программу с объектами класса OBJ путем установки в них статического указателя на самого себя. После этого все объекты могут передавать сообщения методом
SendEvent
, который просто ретранслируется в аналогичный метод
SendEvent
в классе
PRG.
Последний создает объект-сообщение и помещает указатель на него в
конец списка сообщений
messages
.
// Конструктор: связаться с классом OBJ
PRG::PRG()
{ OBJ::programm = this; }
//---- Прием и запись нового сообщения -------------------
void PRG::SendEvent(char code0,int x0,int y0, void *p0)
{ MS *pm;
pm = new MS(code0,x0,y0,p0);
messages((void *)pm); // Переопределенная операция x(void*) -
} // включить последним
Метод
run
представляет собой диспетчер сообщений, обеспечивая посредством их связь типа " каждый с каждым" . Это значит, что каждое сообщение пропускается через всю цепочку объектов, которые либо игнорируют его, либо обрабатывают. Обработка может закончится очисткой сообщения, тогда оно будет принято всего одним (первым) объектом, В противном случае сообщение будет широковещательным, то есть на него будут реагировать все объекты, которые настроены на его обработку.
// Диспетчер сообщений и объектов -------------------
void PRG::run()
{ MS *pm;
clock_t t;
t = clock();
while(1)
{
for (n=0; (pm = (MS *)messages.Remove(0) !=NULL; n++)
{ // Пока есть сообщения в очереди -
switch (pm->code) // исключить первое
{ // и переключиться по коду
case ms_BORN: // Служебное сообщение от конструктора
objects(pm->p); // объекта - включить в список объектов
break;
case ms_NULL:
break; // Пустое сообщение
case ms_EXIT:
return; // Сообщение о завершении работы
case ms_KILL: // Сообщение об уничтожении процесса -
void *q = pm->p; // Посылается объектом, который хочет
// завершить работу
pp = (OBJ *)objects.Remove(q);
if (pp == NULL) break; // Исключить его из списка
Содержание
Назад
Вперед
Fore
kc
.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий