"Системное программирование" (задача 2)

(1/4) > >>

vimmax:
Что такое сallback в программировании?
Ответить необходимо так, чтобы даже первокурснику было ясно.
Если можно, то с маленьким примером. с очень маленьким.

Sochin:
Callback-функции - это так называемые функции обратного вызова.

Современные приложения как правило имеют многослойную архитектуру. В такой архитектуре имеется некоторое ядро с базовыми сервисами и внешние слои. Причем внешние слои могут разрабатываться позже ядра и соответственно ядро может(и не должно!) знать особенностей внешних слоев.

Если из внешнего слоя необходимо вызвать некоторую функцию ядра, то как правило в этом нет трудностей(при наличии знаний и некривых рук конечно :) ). В то же время вызов функции внешнего слоя из ядра не столь тривиален, поскольку ядро ничего не знает о функциях и сервисах внешних слоев. Для решения этой задачи и придумали callback-функции.

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

С помощью такого механизма сервисы уровня ядра могут вызывать сервисы внешних слоев. Это обеспечивает расширение функциональности без изменения ядра системы.

vimmax:
Sochin - Ответ #1 - надо попроще, цитата слишком сложная. Далеко не каждый первокурсник поймет это определение, а ведь даже на первом курсе по программированию студенты пишут программы используя callback, только они об этом не знают ))))))).

Еще есть варианты? Больше никто не хочет попытаться ответить?

Sochin:
гы-гы. куда уж проще? ))

BODROV:
Цитировать

Обычно такие функции называются функциями обратного вызова. Это просто. Если Вашу функцию должен вызывать Windows, то вы должны указать ей тип передачи параметров как CALLBACK. Этот тип вызова описан в WinDef.H как:

#define CALLBACK    __stdcall

То есть тип передачи параметров PASCAL. Обычный вызов функций осуществляется в стиле WIN32 API. Как же Windows узнает, что эту функцию можно выполнить ? Вы сами, зная то или нет, передаете ее в параметрах. Если вы создаете окно в Win 32, то и передаете функцию окна. Windows эту функцию вызывает когда управляет окном. Все просто. Сказали системе, что если нужно обратиться к окну вот тебе функция. После этого Windows знает, что если нужно перерисовать окно, то он хвать эту функцию и передает ей в параметры WM_PAINT. Идея довольно простая. Операционная система должна уметь вызывать некоторые функции в приложении, чтобы освободить вас как программиста от слежения за программой. Кто писал для ДОС знает как это не удобно думать о том, какое окно видно на экране, а какое нет. Пусть операционная система заботится. Итак, в любой программе для Windows (кстати и не только в понимании графического интерфейса) есть функции, которые вызовет операционная система. Как пример главная функция окна. Эта функция должна быть в программе правильно оформлена, а именно CALLBACK. Обычно мы ее передаем в виде параметров при вызове фнукций WIN32 API.

отсюда :blush:

Навигация

[0] Главная страница сообщений

[#] Следующая страница