如何使用,我得到的註冊進程的進程ID GPROC: -Gproc如何獲得註冊過程的進程ID?
我註冊使用
gproc:reg({p,l,myroom})
現在的過程中,我使用二郎:START_TIMER其預計無論是進程ID或註冊名稱。
erlang:start_timer(3000, self(), "Test Msg"),
所以,而不是self()我想提供myroom的進程ID。以便所有用戶在3000毫秒後都可以獲得測試消息。
如何使用,我得到的註冊進程的進程ID GPROC: -Gproc如何獲得註冊過程的進程ID?
我註冊使用
gproc:reg({p,l,myroom})
現在的過程中,我使用二郎:START_TIMER其預計無論是進程ID或註冊名稱。
erlang:start_timer(3000, self(), "Test Msg"),
所以,而不是self()我想提供myroom的進程ID。以便所有用戶在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_ps ..將盡力與.. .. – 2013-05-08 00:16:17
嘗試gproc:lookup_pid({p,1,myroom})。
感謝您的回覆Jan,但是,它會生成一個異常......''異常錯誤:函數gproc中的錯誤參數 :其中/ 1 在gproc調用中調用gproc:where({p,l,jaan}) :lookup_pid/1(src/gproc.erl,第1308行) ' – 2013-05-07 07:35:17
有趣的是,它是gproc:lookup_pids({p,l,myroom}),其中r但是,如果我將相同的Pid傳遞給erlang:start_timer(3000,gproc:lookup_pids({p,l,myroom}),「Test Mg」)。它產生了一個不好的論證例外.. :( – 2013-05-07 07:51:45
後挖掘更多的細節。即使我這樣做,它會給我列出了在myroom下注冊的Pid,但我想要的過程myroom – 2013-05-07 07:58:30
GPROC文檔搬到這裏:http://blog.rusty.io/2009/09/16/g -proc-erlang-global-process-registry/ – 2013-05-07 14:05:42
該文檔實際上位於GitHub上:https://github.com/uwiger/gproc/blob/master/doc/gproc.md – 2013-05-07 20:17:11