erlang - gen_server 启动了吗?

标签 erlang erlang-otp erlang-supervisor gen-server

有没有办法告诉 gen_server:“主管已初始化所有 gen_servers,现在您可以发送消息”?

我有一个 worker gen_server,他的工作是在他的监督树中设置其他 gen_servers 的状态。如果我刚开始在我的配置服务器的 init 函数中发送消息,有时它会得到 {noproc, _}。我想这意味着配置服务器太快了:他在主管有足够的时间启动所有工作人员之前发送了消息。我通过将 timer:sleep(500) 放在 config_server:init() 中来解决这个问题,这确保所有 gen_server 都有足够的时间进行初始化,但这似乎是一个不雅的解决方案。

有没有合适的方法来做到这一点?

最佳答案

返回超时元组 0来自 init .然后在它返回后立即,handle_info(timeout, State)将被调用。在 handle_info进行一些在主管完成初始化之前不会返回的调用(例如 supervisor:which_children )。

关于erlang - gen_server 启动了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6475450/

相关文章:

erlang - 如何在 Elixir 主管中引用之前启动的进程

erlang - Erlang 消息队列是否跨进程持久化?

erlang - 主管的所有子女死亡后会怎样?

list - 匹配和删除元组列表中的项目

erlang - ejabberd 如何处理消息排序和传递?

erlang - 如何在erlang的文件中存储元组及其大小?

file - 如何在 Erlang 中使用通配符 * 检查文件是否存在?

erlang - OTP 主管可以监控远程节点上的进程吗?

erlang - Rebar3 是否使用 HiPE 编译 Dialyzer 模块?

ERLANG 将字符串转换为元组列表