是boost::信号槽被同步或异步调用
Are boost::signals slots called synchronously or asynchronously?
有人能告诉我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()
以未定义的顺序执行)?
在Boost中。信号槽被同步调用,连接到同一信号的槽按添加顺序调用。线程安全变体Boost.Signals2 也是如此
这应该打印"Hello World Foo",但可以合法打印"World Hello Foo"因为对多个连接插槽的调用顺序没有定义为AFAIK。
如果您想要严格的订单,请使用以下语法:
sig.connect(1, World());
sig.connect(0, Hello());
相关文章:
- gRPC cpp 异步服务器与同步服务器
- 异步操作的 Asio 处理程序在其同步对应项正常工作时不会调用
- 提升 ASIO:异步写入,同步
- 将阻止同步代码转换为异步
- 使用boost :: Beast进行CPU重的REST API,我是否应该使用异步或同步方式来实现它们以期望延迟
- 在 UWP 应用程序中,future.wait() 在尝试同步来自异步方法的响应时继续等待
- sqlite3_exec回调是同步还是异步
- 谈到套接字时使用的同步和异步术语
- C++:如何异步调用同步库调用
- 设计一个结合同步和异步操作的c++ API
- 同步来自多个对象的异步调用
- 工作线程中的同步与异步ioctl
- 当调用ReadDirectoryChangesW时,只有第一次调用返回任何更改(同步和异步)
- curl_easy_perform()是同步还是异步
- 是更好的同步或异步从boost asio时,有大量的计算和推/弹出线程安全容器
- C++ 提升 ASIO |同步写入到异步读取 |无法在第二次读取中接收正确的数据
- 是boost::信号槽被同步或异步调用
- 提升asio同步与异步操作性能
- 使用异步调用与在线程中使用同步调用相同
- 同步和异步api