6

谁能告诉我boost::signals插槽是同步调用还是异步调用?

例如我有这段代码:

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();

cout << "Foo";

执行线程是如何工作的?执行是等待Hello()World()执行,然后"Foo"打印出来还是异步调用它们(打印“Foo”并以未定义的顺序调用Hello()World()执行)?

4

2 回答 2

9

Boost.Signals中,槽被同步调用,连接到同一信号的槽按照它们被添加的顺序被调用。线程安全变体Boost.Signals2也是如此

于 2013-02-08T12:59:38.967 回答
0

这应该打印“Hello World Foo”,但可以合法地打印“World Hello Foo”,因为对多个连接的插槽的调用顺序未定义 AFAIK。

如果您想要严格的顺序,请使用以下语法:

sig.connect(1, World());
sig.connect(0, Hello());
于 2013-02-08T12:43:32.323 回答