Callback vs Периодический опрос состояния
От: johny5 Новая Зеландия
Дата: 25.06.07 23:21
Оценка:
Всем привет.

На форуме некоторое время назад был флейм по поводу, что лучше для определения когда у наблюдаемого объекта сменилось состояние: использовать Callback-и или периодически опрашивать объект.

У Callback-ов есть имхо 2 самых главных недостатка:


Первая проблема легко решается использованием boost::signals (заодно он позволяет использовать "перегрузку" callback-ов) вместе с boost::signals::trackable (ну или велосипедом).
А вот по второй, у меня вопрос.

Что если вызов callback-а отвязать от момента собственно происхождения события? Т.е. в момент события, callback не вызывать, а складывать его функтор в некий стек, который может быть вызван позднее, в более безопасное время.

Например.


while(1)
{
    //.. длиинные операции (обработка нажатий на кнопки, сетевые сообщения и прочее)
    //.. неявно наполняем callback_queue
    ...

    //.. вызываем все отложенные callback-и
    callback_queue.run();

    //.. чистим
    callback_queue.clear();
}


По сути это смена синхронного вызова callback-а на асинхронный.
Чем может быть опасен глобальный переход с синхронных callback-ов на асинхронные для целого проекта? В случае если очерёдность вызовов будет сохранена. И в чём этот способ может проигрывать периодическому опросу наблюдаемого объекта?

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

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.