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

Erlang Gproc如何获取已注册进程的进程id?,erlang,Erlang,如何使用gproc获取已注册进程的进程id:- 我使用 gproc:reg({p,l,myroom}) 现在,我使用的是erlang:start\u计时器,它需要进程Id或注册名称 erlang:start_timer(3000, self(), "Test Msg"), 因此,我想提供myroom的进程id,而不是self()。因此,所有用户都可以在3000毫秒后获得测试消息。尝试gproc:lookup\u pid({p,1,myroom})。因此,您可能在这里尝试了错误的操作erlang

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

我使用

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

现在,我使用的是erlang:start\u计时器,它需要进程Id或注册名称

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

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

尝试gproc:lookup\u pid({p,1,myroom})。

因此,您可能在这里尝试了错误的操作
erlang:start_timer/3
将单个pid作为参数,但您希望向零个或多个具有本地myroom属性的pid发送消息。听起来你最好还是用它来发送信息,也许就用它吧

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})].

[erlang:start_timer(3000,Pid,{msg,“Test msg”})|Pid感谢回复Jan,但是,它生成了一个异常…`异常错误:函数gproc中的参数错误:where/1被称为gproc:where({p,l,jaan})在gproc:lookup_Pid/1(src/gproc.erl,第1308行)`有趣的是,它是gproc:lookuppids({p,l,myroom})但是,如果我将相同的Pid传递给erlang:start_timer(3000,gproc:lookup_Pid({p,l,myroom}),“Test Mg”),则返回进程id。它会生成一个错误的参数异常..:(在深入了解更多细节之后。即使我这样做了,它也会给我在myroom下注册的Pid列表,但我希望流程myroomGproc文档的Pid移到这里:文档实际上在GitHub上: