boost :: signals插槽是同步还是异步调用?

时间:2013-02-08 12:15:00

标签: c++ boost asynchronous execution boost-signals

有人能告诉我同步或异步调用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"之后或者它是异步调用它们(打印&#34; Foo&#34;并且调用{{1} }和Hello()以未定义的顺序执行)?

2 个答案:

答案 0 :(得分:8)

在同步调用Boost.Signals个插槽中,按照添加顺序调用连接到同一信号的插槽。线程安全变体Boost.Signals2

也是如此

答案 1 :(得分:0)

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

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

sig.connect(1, World());
sig.connect(0, Hello());
相关问题