如何使用gproc获取已注册流程的流程ID: -
我使用
注册了一个流程 gproc:reg({p,l,myroom})
现在,我正在使用erlang:start_timer,它需要Process Id或Registered name。
erlang:start_timer(3000, self(), "Test Msg"),
因此,我想提供myroom的进程ID,而不是self()。这样所有用户都可以在3000毫秒后获得测试消息。
答案 0 :(得分:2)
所以你可能试图在这里做错事。 erlang:start_timer/3
只使用一个pid作为参数,但您希望向零个或多个具有本地myroom属性的pid发送消息。听起来您可能最好使用gproc_ps发送消息,也许只需使用
timer:apply_after(3000, gproc_ps, publish, [l, myroom, "Test Msg"]).
这会将消息发送到您尝试发送消息时订阅myroom事件的所有pid。这意味着即使在之后订阅了的Pids(但在它触发之前)仍然会收到通知。这可能是理想的行为。如果没有,您可以按原样保留注册,并为每个具有myroom属性的pid创建一个计时器:
[erlang:start_timer(3000, Pid, {msg, "Test Msg"}) || Pid <- gproc:lookup_pids({p, l, myroom})].
答案 1 :(得分:0)
尝试gproc:lookup_pid({p,1,myroom})。