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

如何在Erlang中编写简单的接收循环

  •  1
  • marcc  · 技术社区  · 15 年前

    假设在Erlang中有2个进程,每个进程都有一个正在运行的接收循环。我想从ProcessB向ProcessA发送一个信号,但ProcessA实际上不需要对它做任何事情。ProcessA只需要知道ProcessB发送了消息。

    以下是我目前如何实施的:

    receive   
        {message_from_process_b} ->  
            io:format("received a message from b", []);  
    end,  
    %% at this point I know that I've received the message from B.  
    

    它很好用。但是出于好奇,如果没有 io:format

    3 回复  |  直到 15 年前
        1
  •  7
  •   Gordon Guthrie    15 年前

    您确实应该构建一个OTP应用程序,进程B应该是gen_服务器。

    消息发送语义和构建您自己的发送/接收协议都很好,但除非您真正了解自己在做什么,否则您将开始构建无法维护的服务器。

    我的建议是坐下来研究如何使您的应用程序成为一个结构合理的标准OTP应用程序,这样您就可以将Yaws作为应用程序树的一部分启动,并在普通OTP框架内使用ProcessA和ProcessB完成所有其他工作。

        2
  •  6
  •   Simeon Pilgrim    15 年前

        3
  •  3
  •   bjnortier    15 年前

    正如西缅朝圣者所说,你可以做到

    receive   
        {message_from_process_b} -> ok
    end,  
    

    但您可能需要添加一个超时:

    receive   
        {message_from_process_b} -> ok
        after 1000 -> io:format("timeout!", [])
    end,
    

    以满足从不接收信息(即传感器中发生故障)的需要。