callback 回调函数 实现原理


回调函数是由系统调用的, 但确是以 "设置回调函数的进程" 的身份调用的, 系统不可能在系统线程内使用call或jmp指令调用回调函数, 那么是什么原理呢?
下面是小弟猜想的两种方法:
是在进程里再创建个线程? 执行回调?
还是在即将切换到 "设置回调函数的线程" 时, 插入执行的回调?
如果是后者, 那么怎么处理栈溢出问题? 如果两者都不是, 那么实现原理是什么?

补充一下, 例如一个程序向另一个程序发送消息, 另一个程序要首先回调WndProc的, 那么我问的就是, 回调WndProc的原理, 谁调用的, 怎么调用的, 所在的栈空间和线程id是什么

操作系统 windows

aalmns 9 years, 10 months ago

回调函数就是你丢进去一个函数指针,系统在合适的时候(比如某一事件完成、收到一个信号等)通过函数指针调用这个函数。
这里的“系统”指的不一定是系统进程或内核线程,指的是一个软件系统。比如一个多线程下载库可能需要一个回调函数,在下载完成是调用这个函数来执行用户需要的动作。
这个回调函数仍然是在当前进程的空间里。实现方式有很多种,调用的线程可能不是当前线程,系统可能会维护一个消息队列,由这个维护消息队列的线程调用。当然可能是其他的

虎皮虾虾卷 answered 9 years, 10 months ago

Your Answer