代码之家  ›  专栏  ›  技术社区  ›  hyperboreean

erlang-一次检查一次邮箱消息

  •  4
  • hyperboreean  · 技术社区  · 15 年前

    我试图检查一个节点从其他节点接收到的消息,但不是以其他方式 flush() erlang:process_info(self(), messages_queue_len). ,但我想用某种方法在某种变量中一次提取一条消息,以便进行调试。

    3 回复  |  直到 15 年前
        1
  •  1
  •   cthulahoops    15 年前

    receive

    请参见: http://www.erlang.org/doc/getting_started/conc_prog.html#id2263965

    如果您只想获取shell中的第一条消息进行调试,可以尝试定义如下有趣的内容:

    1> self() ! foo.
    foo
    2> F = fun() -> receive X -> X end end.
    #Fun<erl_eval.20.67289768>
    3> F().
    foo
    
        2
  •  7
  •   Roberto Aloi    15 年前

    你可能想看看 dbg Erlang中的模块。

    dbg:tracer().
    

    跟踪进程(在本例中为self())接收的所有消息(r):

    dbg:p(self(), r).
    

    更多信息 here

        3
  •  2
  •   Gustavo Chaín    12 年前

    或者您可以使用:

    1> F = fun() -> receive X -> {message, X} after 0 -> no_message end end.
    #Fun<erl_eval.20.111823515>
    2> F().
    no_message
    3> self() ! foo.
    foo
    4> self() ! bar.
    bar
    5> F().
    {message, foo}
    6> F().
    {message, bar}
    

    ... 防止堵塞