C++ Actor Framework 处理 SIGINT

C++ Actor Framework handling SIGINT

当应用程序收到 SIGINT (^C) 时,我很难确定如何关闭 CAF actor 系统。我知道 csignal,但它需要一个函数(不是 class 函数,也不是 lambda)因此我无法在范围内获得 actor_system var 来向我的演员发送消息。

@parktomatomi 已经提到这个例子作为参考:https://github.com/actor-framework/actor-framework/blob/5ead6f95182e1e2fee683de59579ef35f58588da/examples/curl/curl_fuse.cpp

添加更多上下文:示例在循环中轮询原子的原因来自 C 和 C++ 标准对信号处理程序施加的限制。在这里您可以安全地做的事情很少。特别是,分配内存是不安全的。因此,即使我们有安全的方法将参与者系统传递给信号处理程序,我们也无法发送 CAF 消息。通过原子操作设置标志是为数不多的安​​全操作之一,但这意味着您需要在另一个线程中轮询此标志以触发一些有用的操作。