如何使用 gproc 获取已注册进程的进程 ID:-
我注册了一个使用
gproc:reg({p,l,myroom})
现在,我正在使用 erlang:start_timer ,它需要进程 ID 或注册名称。
erlang:start_timer(3000, self(), "Test Msg"),
因此,我想提供 myroom 的进程 ID 而不是 self()。这样所有用户都可以在 3000 毫秒后收到测试消息。
如何使用 gproc 获取已注册进程的进程 ID:-
我注册了一个使用
gproc:reg({p,l,myroom})
现在,我正在使用 erlang:start_timer ,它需要进程 ID 或注册名称。
erlang:start_timer(3000, self(), "Test Msg"),
因此,我想提供 myroom 的进程 ID 而不是 self()。这样所有用户都可以在 3000 毫秒后收到测试消息。
所以你可能在这里尝试做错事。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})].
试试 gproc:lookup_pid({p, 1, myroom})。