1

如何使用 gproc 获取已注册进程的进程 ID:-

我注册了一个使用

gproc:reg({p,l,myroom})

现在,我正在使用 erlang:start_timer ,它需要进程 ID 或注册名称。

erlang:start_timer(3000, self(), "Test Msg"),

因此,我想提供 myroom 的进程 ID 而不是 self()。这样所有用户都可以在 3000 毫秒后收到测试消息。

4

2 回答 2

2

所以你可能在这里尝试做错事。erlang:start_timer/3将单个 pid 作为参数,但您想向零个或多个具有本地 myroom 属性的 pid 发送消息。听起来你最好使用gproc_ps发送消息,也许只是使用

timer:apply_after(3000, gproc_ps, publish, [l, myroom, "Test Msg"]).

这会将消息发送到在您尝试发送消息时订阅 myroom 事件的所有 pid。这意味着即使在计划之后(但在它触发之前)订阅的 Pid 仍然会收到通知。这可能是期望的行为。如果没有,您可以保持原样注册,并为每个具有 myroom 属性的 pid 创建一个计时器:

[erlang:start_timer(3000, Pid, {msg, "Test Msg"}) || Pid <- gproc:lookup_pids({p, l, myroom})].
于 2013-05-07T21:57:24.480 回答
0

试试 gproc:lookup_pid({p, 1, myroom})。

于 2013-05-07T07:26:23.393 回答