Извлечь указатель на объект по
delete pp; // Разрушить динамический объект -
break; // вызвать виртуальный деструктор
default: // Остальные сообщения передаются
int n=objects.size(); // всем объектам в списке
for (m=0; m<n; m++)
{ // Извлечь указатель на объект по номеру
OBJ *pp = (OBJ*)objects[m];
// Вызвать виртуальную функцию обработки
// сообщение объектом
pp->HandleEvent(pm);
// Сообщение обработано данным объектом
if (pm->code == ms_NULL) break;
}
}
delete pm; // Уничтожить сообщение
}
}
//----- Проверка источников сообщений ---------------------
if (kbhit()) // Сообщение от клавиатуры
{
pm = new MS(ms_KEYB,(int)getch(),0,NULL);
messages((void *)pm);
}
if ( clock()-t > 1) // Сообщение от таймера (часы)
{ t = clock();
pm = new MS(ms_TICK,0,0,NULL);
messages((void *)pm);
}
}}
Диспетчер состоит из двух частей. Первая часть обеспечивает систему взаимосвязи объектов через сообщения. Для этого она извлекает по одному сообщению из списка и " пропускает" его через все объекты. Обработка сообщения осуществляется виртуальной функцией
HandleEvent , конкретный вид которой будет зависеть от того, к какому производному классу относится этот объект. " Пропускание" сообщения может прерваться, если объект его сбрасывает. Так или иначе, по окончании этого процесса сообщение уничтожается.
Среди сообщений следует выделить служебные, касающиеся создания и уничтожения объектов. Когда в программе создается новый объект (а создается он в процессе обработки сообщения другим объектом), то его конструктор посылает сообщение о своем " рождении" , по которому указатель на этот объект включается в общий список. Уничтожение объекта происходит сложнее. Дело в том, что в процессе обработки сообщения объект не может уничтожить сам себя (то есть выполнить что-то вроде
delete this ). Хотя бы потому, что диспетчер продолжает процесс обработки сообщений. Вместо этого объект посылает служебное сообщение с просьбой " убить его" , которое отрабатывается диспетчером.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий