In the Learning OpenCV
书,我来到这个词callback
,有时与routine
as callback routine
.
当我们说的时候我们是什么意思callback
?
Thanks.
什么是回调函数?
简单来说,一个回调函数是程序员未显式调用的函数。相反,有一些机制不断等待事件发生,并且它将调用选定的函数来响应特定事件。
当操作(函数)需要很长时间执行并且函数的调用者不想等到操作完成,但希望知道操作的结果时,通常使用此机制。通常,回调函数有助于实现这样的异步机制,其中调用者进行注册以获取有关耗时处理和连续其他操作的结果的通知,而在稍后的时间点,调用者会收到结果通知。
一个实际的例子:
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
希望这可以帮助!
Note:
Imported this answer from one of my old answers here https://stackoverflow.com/questions/6183847/callback-functions-in-c-c-c/6184236#6184236.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)