实际上,我在 Qt 中编程时一直在使用信号和插槽。信号和槽的主要用途是在 UI 交互中,例如,单击按钮会发送一个信号,该信号将调用槽来执行操作。我知道可以将信号和插槽用于非 gui 应用程序,例如服务器端应用程序。我寻找其他提供信号和插槽的库,并找到了boost库。这与我从 Qt 中学到的东西有些不同。然后我想知道信号和槽的真正用途是什么,因为我可以手动调用一个函数来在给定的时间执行一个动作。
例如在 boost 这里是信号/槽的一个例子:
#include <boost/signals2.hpp>
#include <iostream>
void mySlot(){
std::cout << "I'm a slot" << std::endl;
}
void main(){
boost::signals2::signal<void ()> sig;
// Connecting the slot to the signal.
sig.connect(mySlot);
// Emitting a signal that will call mySlot
sig();
return 0;
}
我可以简单地通过一个简单的调用来做同样的事情,mySlot()
不是吗?
并不是让我想到的是,当我们尝试连接两个不同的插槽时,它们的调用顺序与连接顺序相同。如果第一个插槽被阻塞(尝试添加一个无限循环),第二个插槽将永远不会被调用!我猜它是一种存储函数地址然后迭代循环并逐个调用的向量!
信号和插槽背后的魔力是什么?还是只是开发人员的一种抽象?
先感谢您。