有人能告诉我同步或异步调用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()
以未定义的顺序执行)?
答案 0 :(得分:8)
在同步调用Boost.Signals个插槽中,按照添加顺序调用连接到同一信号的插槽。线程安全变体Boost.Signals2
也是如此答案 1 :(得分:0)
这应打印“Hello World Foo”,但可以合法打印“World Hello Foo”,因为多个连接插槽的调用顺序未定义为AFAIK。
如果您想要严格的订单,请使用以下语法:
sig.connect(1, World());
sig.connect(0, Hello());