2012-02-24 68 views
3

在項目gproc的文件gen_leader.erl中,創建了自定義行爲。但是在下面的語句中,模塊「gen」是什麼?我在「erlang文檔工具http://www.erlang.org/erldoc」中找不到這個模塊?你能給我一些解釋嗎?什麼是gen:開始意思?

behaviour_info(callbacks) -> 
    [{init,1}, 
    {elected,2}, 
    {surrendered,3}, 
    {handle_leader_call,4}, 
    {handle_leader_cast,3}, 
    {handle_local_only, 4}, 
    {from_leader,3}, 
    {handle_call,3}, 
    {handle_cast,2}, 
    {handle_DOWN,3}, 
    {handle_info,2}, 
    {terminate,2}, 
    {code_change,4}]; 
behaviour_info(_Other) -> 
    undefined. 

start_link(Name, [_|_] = CandidateNodes, Workers, 
     Mod, Arg, Options) when is_atom(Name) -> 
    gen:start(?MODULE, link, {local,Name}, Mod, %<<++++++ What's the meaning? 
      {CandidateNodes, Workers, Arg}, Options). 

回答

9

看起來gen:start()指的是gen.erl。根據文件中的文檔,gen.erl實現了gen_server,gen_fsm和其他OTP行爲的通用部分。在這種情況下,它看起來像gen_start處理產生新的進程。它會檢查一個進程是否已經產生了給定的名字。如果有,則返回錯誤。如果沒有,則通過調用模塊的startstart_link函數產生新過程。

換句話說,當你調用gen_server:startgen_fsm:start,它調用gen:start(它基本的完整性檢查),創:開始,依次調用模塊的啓動或start_link。當您創建自定義的OTP行爲時,您必須直接撥打gen:start,以便您不需要複製gen.erl中的錯誤檢查代碼。

+0

非常感謝。 – 2012-02-24 03:50:43