Давно я ничего не писал, но это не означает что всё остановилось. Вчера я выложил новую версию библиотеки acto.
Основное нововведение в данном релизе — возможность собирать библиотеку под GNU/Linux. Протестировано на Ubuntu 8.04 (32-bit) и Ubuntu 9.04 (64-bit). Также есть некоторые нововведения в функциональности.
Когда это логически целесообразно, актер может самостоятельно завершить свою работу, вызвав метод this->terminate(), в процессе обработки поступившего сообщения. Также, хочу напомнить, что имеется функция acto::destroy(actor_ref), которая позволяет принудительно завершить работу любого актера, если у вас есть действительная ссылка на него.
В дополнение к двум вышеприведённым функция завершения работы актера, появился функция ожидания завершения работы актера acto::join(actor_ref). Её целесообразно использовать в рамках основного потока выполнения программы. Пример использования можно посмотреть в проекте ping-pong.
Возможность привязывать обработку сообщений актера к текущему системному потоку. Например, к главному потоку выполнения программы. Для этого необходимо указать специальный флаг во время создания актера — acto::instance_t
(acto::aoBindToThread). При этом сообщения будут обрабатываться в рамках того потока, в котором актер был создан, и только при вызове функции acto::process_messages(). Для ускорения процесса пересылки сообщений появилась возможность создавать объекты-классы сообщений, например — acto::message_class_t
msg_ball_class; Дело в том, что в текущей реализации при каждом вызове функции send(msg_ball()) происходит обращение к глобальному словарю, чтобы по типу сообщения получить уникальный идентификатор. Объект-класс запоминает данный идентификатор однократно, и в дальнейшем позволяет получать его без обращения к глобальному словарю. Для этого вызов метода send должен быть сделан следующим образом send(msg_ball_class.create()).
Вроде ничего существенного не забыто. Оставайтесь на связи.
Комментариев нет:
Отправить комментарий