2

嗨,我很想知道回调函数的用途是什么。任何人都可以用一个简单的例子来解释它。

在我的项目中,我观察到某个特定的回调函数突然被调用堆栈中的某个函数调用,该函数在调用堆栈中显示为 User.dll!546383c()。

我真的很困惑谁在调用此回调以及何时发生。

调用堆栈看起来不错,直到某个点(即函数 A() 调用 B() 调用 C() 等......)突然发生了一些事情,并且 User.dll 中的某些函数调用了这个回调。所以我失去了对功能的了解。

任何人都可以用一个例子来解释。提前致谢。

4

2 回答 2

2

嗨,我很想知道回调函数的用途是什么。任何人都可以用一个简单的例子来解释它。

关于这一点没有太多可说的。回调是一些库或系统代码让客户端/应用程序代码处理事件的机制。例如,您可能有一个与以下内容相关的回调:

  • 某些计时器/警报到期
  • I/O 事件,例如从文件、网络、键盘/控制台等读取或写入的完成,甚至是程序读取或写入能力的更改(基于缓冲区大小限制),或新/丢失连接
  • 完成一些异步处理(例如另一个线程做一些计算)
  • 某些异步处理中的意外错误
  • 引导处于特定状态的某个进程的机会(例如,决定是否接受特定客户端,之后调用者将断开连接或开始一些异步客户端处理)

为什么 user.dll 恰好给你一个回调——谁知道呢?你没有告诉我们任何关于你的程序或它在做什么的事情。

在逻辑级别上,回调实际上可能不会在您的线程中分派,直到您的线程检查(甚至可能阻塞等待)排队的消息,或者回调可能会中断您的线程正在执行的任何单独处理。当事件由 C++ 程序的其他部分创建时,前者很常见,后者常见于操作系统和硬件回调(例如 Linux/UNIX 上的“信号”)。

于 2012-04-25T10:31:17.427 回答
1

简单地说,回调就像函数指针,用于配置一个函数以报告回(回调)应用程序中的另一个函数。例如,使用这种方法,可以处理诸如按钮单击、鼠标移动、菜单选择以及内存中两个实体之间的一般双向通信等事件。

因此触发回调的可能是用户输入或引发的任何其他通信事件。

于 2012-04-25T10:34:59.553 回答