c++ - C++中的回调函数有什么用?

标签 c++ c visual-c++ callback asynccallback

Hi I am very curious to know what is the usage of callback functions. Can anyone kindly explain it with a simple example please.

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

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

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

谁能举例说明一下。提前致谢。

最佳答案

Hi I am very curious to know what is the usage of callback functions. Can anyone kindly explain it with a simple example please.

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

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

为什么 user.dll 恰好给你一个回调 - 谁知道呢?您还没有告诉我们任何有关您的程序或它正在做什么的信息。

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

关于c++ - C++中的回调函数有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10313663/

相关文章:

windows - 我如何在 Windows 中为类似/dev/null 的东西调用 CreateFile?

c# - 为什么 MouseMove 事件发生在 MouseUp 事件之后?

c++ - 使用大括号而不是圆括号调用构造函数

c - OpenSSL 库 : 2 on Linux libcrypto and libssl and more than 13 on windows. 我应该在 Windows 上链接什么来编译我的示例?

c - 在C中进行输入解析并确定要转发到的位置

c - realloc 后数据被覆盖

c++ - Qt:QStandardItem 是否通过 QVariant 获得指针的所有权?

c++ - visual studio 2012 中的 initializer_list

c++ - C++ 映射是什么意思?

visual-studio - 在 vs2008 中产生 cmd.exe 错误