Библиотека knigago >> Литература по изданиям >> Современные российские издания >> Обратные вызовы в C++


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1896, книга: Ноябрь, или Гуменщик
автор: Андрус Кивиряхк

"Ноябрь, или Гуменщик" представляет собой завораживающий и атмосферный роман-триллер, действие которого разворачивается в сельской Эстонии 19 века. Автор Андрус Кивиряхк мастерски передает суровость и изоляцию своего родного региона, создавая ощутимый фон для интригующей истории. Главным героем романа является Рютта, молодая женщина из бедной крестьянской семьи. Когда ее муж погибает при невыясненных обстоятельствах, она остается вдовой с двумя маленькими детьми. В надежде сохранить...

СЛУЧАЙНАЯ КНИГА

Истоки славян. Юрий Анатольевич Николаев
- Истоки славян

Жанр: История: прочее

Год издания: 2020

Серия: Западные славяне Южной Балтики и средневековье Европы

СЛУЧАЙНАЯ КНИГА

«Шарашка» попаданцев. Опередить Гитлера!. Андрей Ходов
- «Шарашка» попаданцев. Опередить Гитлера!

Жанр: Альтернативная история

Год издания: 2011

Серия: Военно-историческая фантастика

Виталий Евгеньевич Ткаченко - Обратные вызовы в C++

Обратные вызовы в C++
Книга - Обратные вызовы в C++.  Виталий Евгеньевич Ткаченко  - прочитать полностью в библиотеке КнигаГо
Название:
Обратные вызовы в C++
Виталий Евгеньевич Ткаченко

Жанр:

Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, C, C++, C#

Изадано в серии:

неизвестно

Издательство:

SelfPub

Год издания:

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Обратные вызовы в C++"

В практике разработки ПО зачастую встает задача динамической модификации программного кода в зависимости от текущих или настраиваемых значений параметров. Для решения этой задачи широко используются обратные вызовы. В языке C++ обратные вызовы реализуются различными способами, и далеко не всегда очевидно, какой из них лучший для конкретной ситуации. В книге рассмотрены теоретические и практические аспекты организации обратных вызовов, проанализированы достоинства и недостатки различных реализаций, выработаны рекомендации по выбору в зависимости от требований к проектируемому ПО. В первую очередь книга предназначена для программистов среднего (middle) уровня, т.е. тех, кто уже достаточно хорошо знает язык C++, но хотел бы расширить и углубить свои знания в области проектирования и дизайна. В определенной степени она также будет интересна опытным разработчикам, с одной стороны, как систематизация знаний, с другой стороны, как источник идей и методов для решения практических задач.


К этой книге применимы такие ключевые слова (теги) как: Самиздат,языки программирования,разработка программного обеспечения

Читаем онлайн "Обратные вызовы в C++". [Страница - 4]

возникновения исключений.

Простое и эффективное решение указанных проблем представлено на Рис. 5. Код, обрабатывающий имена поддерживаемых протоколов (например, отображение в пользовательском интерфейсе), упаковывается в отдельный компонент. Для получения протоколов вызывается функция, в которую указанный компонент передается как аргумент. Функция перебирает хранимые значения, для каждого значения через сохраненный аргумент вызывается код обработки, имя протокола передается как параметр.


Книгаго: Обратные вызовы в C++. Иллюстрация № 5Рис. 5. Просмотр элементов с помощью обратных вызовов


1.2.4. Уведомление о событиях

Представим, что мы в системе запустили таймер, и нам нужно получить уведомление о срабатывании таймера. Самое простое решение – в процессе выполнения опрашивать таймер и анализировать, не истекло ли время. Как часто нужно делать опрос? Слишком часто – теряется производительность, слишком редко – теряется точность. Кроме того, приходится постоянно в определенных участках кода вставлять вызов опроса. Учитывая, что в программе могут работать несколько потоков, опрашивать таймер они будут с разной частотой, и каждый поток обнаружит срабатывание таймера в разное время.

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


Книгаго: Обратные вызовы в C++. Иллюстрация № 6Рис. 6. Уведомление о срабатывании таймера с помощью обратного вызова


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

1.3. Модель обратных вызовов

1.3.1. Определения и термины

Модель обратных вызовов изображена на Рис. 7. Структурно она состоит из двух частей: исполнитель и инициатор.

Исполнитель – это компонент, в который упаковывается код обратного вызова (исполняемый код). Исполнитель также содержит контекст, который представляет собой совокупность данных, влияющих на поведение исполняемого кода.

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


Книгаго: Обратные вызовы в C++. Иллюстрация № 7Рис. 7. Модель обратных вызовов


Дадим формальные определения используемых терминов.


Исполнитель: компонент, который реализует исполняемый код обратного вызова.

Инициатор: компонент, который осуществляет обратный вызов.

Аргумент: хранимая точка входа в код обратного вызова.

Настройка: процедура сохранения аргумента.

Информация вызова: значения, которые формируются инициатором и передаются в исполнитель.

Контекст: множество переменных и состояний, которые влияют на поведение исполняемого кода.


В процессе реализации обратного вызова нам нужно ответить на следующие вопросы.

1. Как оформить исполняемый код, чтобы он мог быть вызван инициатором?

2. Как хранить аргумент?

3. Как передавать контекст?


Различные способы реализации дают свои ответы на поставленные вопросы.  Но прежде, чем приступить к их изучению, необходимо осветить еще несколько моментов.

1.3.2. Контекст

Вне зависимости от того, каким способом реализован исполнитель, исполняемый код всегда --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.