关于回调函数和线程的一般查询

时间:2012-08-11 11:00:56

标签: c++ multithreading callback function-pointers callstack

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

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

1 个答案:

答案 0 :(得分:10)

作为一般规则,函数调用始终在调用者的上下文(线程)中进行。无论被调用者是函数,成员函数,函子对象还是其他任何东西都无关紧要。

换句话说,当线程调用你的回调时,调用就会在线程中发生。主线程未停止以执行回调。事实上,它不会以任何方式涉及回调的执行。

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