Что такое функция Callbak?
Проще говоря, Функция обратного вызова - это функция, которая явно не вызывается программистом.Вместо этого существует некоторый механизм, который постоянно ожидает возникновения событий, и он будет вызывать выбранные функции в ответ на определенные события.
Этот механизм обычно используется, когда операция (функция) может занять много времени для выполнения и вызывающегофункция не хочет ждать завершения операции, но хочет получить информацию о результате операции.Как правило, функции обратного вызова помогают реализовать такой асинхронный механизм , в котором вызывающий регистр регистрируется, чтобы получить информацию о результате длительной обработки и непрерывных других операций в более поздний момент времени,вызывающий получает информацию о результате.
Практический пример:
Обработка событий Windows:
практически все программы Windows устанавливают цикл обработки событий,это заставляет программу реагировать на определенные события (например, нажатия кнопок, выбор флажка, получение фокуса окна) путем вызова функции.Удобно то, что программист может указать, какая функция вызывается, когда (скажем) нажимается определенная кнопка, даже если невозможно указать, когда кнопка будет нажата.Вызываемая функция называется обратным вызовом.
Исходный код Рисунок:
//warning: Mind compiled code, intended to illustrate the mechanism
#include <map>
typedef void (*Callback)();
std::map<int, Callback> callback_map;
void RegisterCallback(int event, Callback function)
{
callback_map[event] = function;
}
bool finished = false;
int GetNextEvent()
{
static int i = 0;
++i;
if (i == 5) finished = false;
}
void EventProcessor()
{
int event;
while (!finished)
{
event = GetNextEvent();
std::map<int, Callback>::const_iterator it = callback_map.find(event);
if (it != callback_map.end()) // if a callback is registered for event
{
Callback function = *it;
if (function)
{
(*function)();
}
else
{
std::cout << "No callback found\n";
}
}
}
}
void Cat()
{
std::cout << "Cat\n";
}
void Dog()
{
std::cout << "Dog\n";
}
void Bird()
{
std::cout << "Bird\n";
}
int main()
{
RegisterCallBack(1, Cat);
RegisterCallback(2, Dog);
RegisterCallback(3, Cat);
RegisterCallback(4, Bird);
RegisterCallback(5, Cat);
EventProcessor();
return 0;
}
Приведенное выше выдает следующее:
Cat
Dog
Cat
Bird
Cat
Надеюсь, это поможет!
Примечание: Это из одного из моих предыдущих ответов, здесь