代码之家  ›  专栏  ›  技术社区  ›  Alexey Romanov

检查Erlang中的活动计时器

  •  10
  • Alexey Romanov  · 技术社区  · 14 年前

    有没有一个简单的方法来获取所有当前等待计时器的列表 erlang:send_after , erlang:apply_after 二郎等?

    5 回复  |  直到 14 年前
        1
  •  6
  •   Zed    14 年前

    dbg

    1> ets:new(timer_dbg, ['public', 'named_table', 'bag']).
    timer_dbg
    

    2> Fun = fun({'trace', _Pid, 'return_from', {erlang, send_after, 3}, Ref}, []) ->
    2>           ets:insert(timer_dbg, {Ref}), [];
    2>          (_Msg, []) ->
    2>           []
    2>       end.
    #Fun<erl_eval.12.113037538>
    

    erlang:send_after()

    3> dbg:tracer('process', {Fun, []}).
    {ok,<0.35.0>}
    4> dbg:p('all', 'c').
    {ok,[{matched,nonode@nohost,26}]}
    5> dbg:tpl(erlang, send_after, [{'_', [], [{'return_trace'}]}]).
    {ok,[{matched,nonode@nohost,1},{saved,1}]}
    

    6> erlang:send_after(1000, self(), {}).
    #Ref<0.0.0.43>
    7> erlang:send_after(1000, self(), {}).
    #Ref<0.0.0.47>
    8> erlang:send_after(1000, self(), {}).
    #Ref<0.0.0.51>
    

    9> ets:tab2list(timer_dbg).
    [{#Ref<0.0.0.51>},{#Ref<0.0.0.43>},{#Ref<0.0.0.47>}]
    

    erlang:read_timer()

    send_after cancel_timer

        2
  •  2
  •   hdima    14 年前
        3
  •  2
  •   user425720    14 年前

        4
  •  1
  •   user425720    14 年前

      ets:tab2list(timer_tab).                                            
    [{{1288384968923398,#Ref<0.0.0.30>},
      timeout,
      {erlang,integer_to_list,[23]}},
     {{23334621698390115688,#Ref<0.0.0.189>},
      timeout,
      {erlang,integer_to_list,[23]}}]
    
        5
  •  0
  •   Nikolaus Gradwohl    14 年前