16

我有一个关于线程和回调的一般性问题。例如,我们有一个线程与主程序一起连续运行。

主程序已经向线程注册了一个回调函数。所以线程可以随时调用回调函数。通常,我们通过将函数指针传递给线程来注册回调。我想知道线程何时调用该回调函数,它是该线程的一部分还是主程序的一部分。我想知道这个过程的机制,比如当线程调用回调时,主程序执行是如何停止或中断的。另一件事是调用回调时函数调用堆栈的行为方式。

4

1 回答 1

14

作为一般规则,函数调用总是在调用者的上下文(线程)中进行。被调用者是函数、成员函数、仿函数对象还是其他任何东西都没有关系。

换句话说,当线程调用你的回调时,调用发生在线程中。主线程不会停止以执行回调。事实上,它与回调的执行没有任何关系。

各种框架提供了一些技巧,使一个线程看起来可以直接调用另一个线程,但这总是通过某种编组的消息传递机制以协作的方式完成。线程通常不会相互旋转堆栈。

于 2012-08-11T11:12:49.977 回答