我知道演员可以通过功能来实现。以下代码段来自CAF github examples / hello_world.cpp。
我知道第一个实现方法,它将几个消息处理程序绑定到actor。演员将在后台活着并由事件触发,然后在调用self->quit
时终止。
但是第二个没有返回任何内容,它的消息处理程序在哪里?它似乎没有任何self->quit
- 类似的函数来终止自身。当hello_world返回时,它还活着吗?或者它只是在then
完成响应后终止自身?
behavior mirror(event_based_actor* self) {
return {
[=](const string& what) { ... }
[=](int) { ...}
}
};
void hello_world(event_based_actor* self, const actor& buddy) {
self->sync_send(...).then(
...
);
}
int main() {
auto mirror_actor = spawn(mirror);
spawn(hello_world, mirror_actor);
await_all_actors_done();
shutdown();
}
更新
如果在其行为堆栈中没有消息处理程序,Actor将自行终止。
即使hello_word
也没有返回演员的聆听行为。当函数返回时,actor仍然活着。因为sync_send
已在堆栈中添加then-behavior
以准备从镜像响应。弹出一次性then-behavior
以完成响应后,堆栈为空,然后actor终止自己。
答案 0 :(得分:4)
但是第二个没有返回任何内容,它的消息处理程序在哪里?它似乎没有任何
self->quit
- 类似的函数来终止自身。hello_world
返回时是否还活着?或者它在完成响应后才会自行终止?
由于函数hello_world
返回void而不是behavior
,执行此函数的actor一旦到达函数末尾就会自动终止。该actor在生成后执行三个动作:
sync_send
发送消息。