Класс luax_::activator

Активатор. Подробнее...

#include <luax.h>

Полный список членов класса

Открытые члены

 activator (lua_State *_lua)
 Создать активатор.
 activator (lua_State *_lua, int _iowner)
 Создать дочерний активатор.

Защищенные члены

virtual void on_close (lua_State *_lua)
 Обработать момент закрытия корневого активатора.

Защищенные данные

lua_State * Lua
 Поток, который может быть возобновлен.

Закрытые статические члены

static void init (lua_State *_lua)
 Создать таблицу активаторов потока.
static void close (lua_State *_lua, int _i)
 Открыть активатор.

Друзья

class luax_
 Приостановить поток.

Подробное описание

Активатор.

Активатор - это объект, который может вызывать события модуля в результате внешних событий (например, действий пользователя, прерываний таймера и т.п). Поток может создавать активаторы, когда необходимо ожидать и обрабатывать внешние события. Активатором может быть, например, панель диалога, на которой расположены управляющие элементы, с которыми взаимодействует пользователь. Внешним событием может быть нажатие кнопки, выбор строки в списке и т.п.

Для каждого потока существует таблица активаторов, события от которых обрабатываются системой. Она используется для закрепления в памяти объектов, которые могут инициировать внешние события.Ключами таблицы являются указатели на объекты класса luax_::activator, а значениями - соответствующие пользовательские объекты Lua. Объект добавленый в таблицу активаторов не может быть удален сборщиком мусора до тех пор, пока он не будет явно удален из этой таблицы.Ключи таблицы являются слабыми ссылками.

Если таблица активаторов не пуста, то выполнение потока может быть приостановлено до момента возникновения события от какого либо активатора. Когда поток приостанавливается управление передается ядру, где происходит ожидание возникновения события и возврат управления прерваному потоку.

Ядро возвращает управление потоку, который создал активатор,вызвавший событие. Потоку передается объект, который вызвал событие, имя модуля, где находится событие и имя события в этом модуле. Передается также дополнительный параметр, значение которого зависит от вида события:

local o, m, e, p = YIELD()

Поток может быть приостановлен в том случае, когда таблица содержит только указанный активатор. В этом случае поток возобновляется только тогда, когда указаный активатор находится в таблице активаторов:

local o, m, e, p = YIELD(a)

Однако ядро не контролирует, что возобновляющее событие происходит именно от этого активатора. Поэтому, если возобновление потока другими активаторами в этот момент не желательно, то нужно блокировать остальные активаторы вне настоящего интерфейса.

Активаторы могут быть организованы в иерархию. При этом только активаторы верхнего уровня располагаются в таблице активаторов и могут приостанавливать выполнение процесса. Дочерний активатор может быть добавлен в локальную таблицу некоторого активатора. Таким образом обеспечивается синхронизация времени жизни различных активаторов. Осовбождение памяти родительского активатора осовбождет память для всех дочерних активаторов. Примером дочернего активатора может служить дочерняя панель, добавляемая динамически в родительскую панель.


Конструктор(ы)

luax_::activator::activator ( lua_State *  _lua  )  [inline]

Создать активатор.

Создает активатор верхнего уровня.

Аргументы:
_lua Стек дочернего потока.
luax_::activator::activator ( lua_State *  _lua,
int  _iowner 
) [inline]

Создать дочерний активатор.

Создает для указанного активатора дочерний активатор.

Аргументы:
_lua Стек потока.
_iowner Позиция родительского активатора.

Методы

void luax_::activator::close ( lua_State *  _lua,
int  _i 
) [static, private]

Открыть активатор.

Фиксирует активатор в памяти до момента закрытия. Сначала на стек помещается активатор, а затем родительский активатор или nil для активаторов верхнего уровня.

<активатор> <родительский активатор или nil>

Аргументы:
_lua Стек дочернего потока. Подключает активатор к существующему активатору. Добавляет активатор в дерево активаторов как дочернюю вершину существующего активатора. При этом активатор фиксируется в памяти до момента освобождения родительского активатора.

Функция предполагает, что объекты на стеке содержит указатель на объект luax_::object, который используется как ключ в локальной таблице активаторов.

Состояние стека не изменяется.

Аргументы:
_lua Стек потока.
_iowner Позиция активатора-владельца.
_i Позиция вложенного активатора. Удалить активатор. Удаляет активатор, расположенный на стеке потока, из таблицы активаторов. Объект освобождается для сборщика мусора. Может быть использована только для освобождения корневых активаторов.

Функция предполагает, что объект на стеке содержит указатель на объект luax_::object, который используется как ключ в таблице активаторов.

Объект остается на стеке.

Аргументы:
_lua Стек дочернего потока.
_i Позиция активатора на стеке.
void luax_::activator::init ( lua_State *  _lua  )  [static, private]

Создать таблицу активаторов потока.

Таблица активаторов создается при инициализации потока. Поток должен иметь таблицу окружения, в которой создается таблица активаторов.

Аргументы:
_lua Стек потока, для которого создается таблица активаторов.
virtual void luax_::activator::on_close ( lua_State *  _lua  )  [inline, protected, virtual]

Обработать момент закрытия корневого активатора.

Вызывается функцией закрытия для выполнения дополнительной обработки закрытия корневого активатора.

Не должна вызывать прерываний и исключений.

Аргументы:
_lua Стек потока.

Документация по друзьям класса и функциям, отноносящимся к классу

friend class luax_ [friend]

Приостановить поток.

Приостанавливает дочерний поток и передает управление ядру, если таблица активаторов не пуста. Функция должны быть последним оператором в стеке вызовов кода C.

Аргументы:
_lua Стек дочернего потока. Приостановить поток для отдельного объекта. Приостанавливает потока и передает управление ядру, если таблица активаторов содержит указанный на стеке потока объект. Функция должны быть последним оператором в стеке вызовов кода C.

Функция предполагает, что объект на стеке содержит указатель на объект luax_::object, который используется как ключ в таблице активаторов.

Объект остается на стеке.

Аргументы:
_lua Стек дочернего потока.
_i Позиция активатора на стеке.

Объявления и описания членов классов находятся в файлах:
Документация по faeton. Последние изменения: Sun Apr 10 01:05:26 2011. Создано системой  doxygen 1.6.3