百科问答小站 logo
百科问答小站 font logo



回调函数 callback 的实现原理是什么? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

我觉得你的问题的本质在于你没搞清楚你说的系统是个什么东西……

你一直混淆了系统,操作系统,内核等等概念,所以完全就是一团浆糊。


你真想知道回调函数的调用堆栈,打个断点调试下不就知道了?


user avatar   qiao-la-jue-shi 网友的相关建议: 
      

我觉得回调函数的机制很简单,但是楼主的问题则把我给搅和糊涂了。这里谈谈自己的看法。

实现回调函数的时候,就是用一个函数指针保存你待回调的函数的地址。然后满足一定的条件的时候,使用这个函数指针来调用你预设定的函数。

自己写过定时器,里面就是这样实现回调函数的。

也阅读过linux内核源码,内核中也是这样实现回调函数的。

很简单的概念啊,楼主的问题在哪里呢?


user avatar   feng-dong 网友的相关建议: 
      

所以你说的是 GUI 中的 event-handler callback。

「回调函数是由系统调用的」—— callback 不是由系统调用的。正确的流程为:

  1. 用户的输入设备发送信息给 device driver。
  2. Device driver 将信息发给某些 manager 程序。比如说,大多数鼠标和键盘动作都会传给 window manager。
  3. Window manager 会把这些动作翻译成 event,通过 IPC 机制传给 app。
  4. App 的 UI framework 会把这些通过 IPC 接受到的 event 放到 event-queue 中。
  5. 你自己,或者 UI framework 会运行一个 loop。这个 loop 不停的去 event-queue 中取 event。
  6. 如果取到,event-loop 会调用相应的 callback。

在 callback 中加断点,用 debugger 调试,你会在 callstack 中看到从 event-loop 到你的 callback 的一系列调用。




  

相关话题

  计算机随机生成一个数是不是真的是随机的? 
  为什么汇编mov指令不能用lock前缀? 
  可以用最通俗的语言告诉我程序员敲的一行行代码怎么变成一个个游戏?那么写代码的难度又在哪里? 
  在函数的入口处对参数的合法性进行检查是一个值得提倡的好习惯吗? 
  学 C# 的是不是被绑在 Windows 上? 
  程序员年龄增大后的职业出路是什么? 
  如何轻松阅读 GitHub 上的项目源码 ? 
  不懂就问:Linux、安卓和鸿蒙到底是什么关系? 
  大型公司里面如何防止程序员接触到核心代码? 
  程序中的堆和栈大小是动态变化的,还是相对固定的? 

前一个讨论
强奸和杀人那个更可恨?
下一个讨论
为什么java返回json时用code=0表示成功, 而我观察的php和nodejs都是用1表示成功?





© 2025-05-18 - tinynew.org. All Rights Reserved.
© 2025-05-18 - tinynew.org. 保留所有权利