"Системное программирование" (задача 2)
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:
Навигация