gen_server名timer_server引起的计时器模块的功能不再返回
题
我创建了一个监督者,催生了一个 gen_server
我叫 timer_server
.其中一项任务的这个 timer_serve
r是管理登记,并呼 timer:send_interval
消息发送到一个pid在一定的时间间隔。
但是,在初始的 gen_server
, ,我在那里呼叫 timer:send_interval
我得到一个锁死。该文件所述的时:功能立即返回,这是非常令人不安。
当我重新命名我 gen_server
要 record_timer_server
这个问题的澄清。我的问题是两倍则:
- 为什么我能创建一个注册过程
timer_server
, 如果那已经被一个当timer:start()
是由我应用程序的开始吗? - 一旦开始,为什么会这样的功能不会导致badmatch找到的名字,如果它打电话到我的
timer_server
使用send_interval
功能?
我不认为代码是必要的,但我可以更新添加一些如果提出要求。
解决方案
这可以重新创建的只是通过以下方式挂上电话来时:send_interval.
1> register(timer_server, self()).
true
2> timer:send_interval(5000, self(), hello).
虽然这种失败...
1> timer:send_interval(5000, self(), hello).
{ok,{interval,#Ref<0.0.0.32>}}
2> register(timer_server, self()).
** exited: {badarg,[{erlang,register,[timer_server,<0.30.0>]},
因此,这似乎是第一个呼吁时器试图开始一个进程称为timer_server,挂着如果你已经采取了这个名字的第一个。
为什么挂着计时器.erl:
ensure_started() ->
case whereis(timer_server) of
undefined ->
C = {timer_server, {?MODULE, start_link, []}, permanent, 1000,
worker, [?MODULE]}
supervisor:start_child(kernel_safe_sup, C), % kernel_safe_sup
ok;
_ -> ok
end.
其返回收,随后通过一gen_server:呼吁timer_server.你的过程,然后被困在等待本身的作出回应。
不隶属于 StackOverflow