Gproc如何获取已注册进程的进程ID?

时间:2013-05-07 07:14:26

标签: erlang

如何使用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毫秒后获得测试消息。

2 个答案:

答案 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})。