我在 Stackoverflow 上遇到过类似的问题,但仍然无法得到一个好的答案:
我对这个信号/槽是如何实现的感到很困惑。
Q1:从下面的代码看,sig连接了两个函数(Hello()和World()),看起来函数是序列化调用的,这也暗示了,一个函数(Hello())需要在进入另一个函数(World())之前完成?=> 单线程程序
Q2:有没有启用多线程信号/槽?(=> World() 会立即启动,不需要等待 Hello() 完成。)或者如果不推荐,你介意告诉我为什么?
struct Hello
{
void operator()() const { std::cout << "Hello";}
};
struct World
{
void operator()() const { std::cout << ", World!" << std::endl;}
};
boost::signal<void ()> sig;
sig.connect(Hello());
sig.connect(World());
sig();
输出:你好,世界!