如果您在接收块的末尾不再次调用该函数,会发生什么情况?-Erlang

海奇

例如:

myFunction()
   receive 
      msg1 -> io:format("Message 1!~n"),
              self() ! msg1,
              myFunction();
      msg2 -> io:format("Message 2!~n")
end.

我学会了像msg1这样的消息;但是最近我犯了一个错误,并编译了类似于msg2的代码。当msg2发生时,之后会发生什么?msg2之后,该进程是否只是位于同一接收方并等待其他消息?

黑曼巴

如果您没有在接收块的末尾再次调用该函数,则该过程将终止。(如果发生这种情况,则发送msg2给该过程),但是如果发送其他消息(msg1除外msg2),则该过程将终止。等待,消息将存储在进程的消息队列中。

-module(wy).
-compile(export_all).

myFunction() ->
receive 
    msg1 -> 
        io:format("Message 1!~n"),
        self() ! msg1,
        myFunction();
    msg2 -> 
        io:format("Message 2!~n")
end.
parent() ->
    Pid = spawn(fun myFunction/0),
    register(myFunction, Pid),
    erlang:monitor(process, Pid),
    receive
        Res -> io:format("Receive ~p~n", [Res])
    end.

main() ->
    spawn(fun() -> parent() end).

首先你需要执行 wy:main().

(1)如果执行myFunction ! msg22.,则可以发现进程myFunction仍然存在,并使用此命令erlang:process_info(whereis(myFunction), messages).,可以找到消息msg22存储在消息队列中。

(2)如果执行myFunction ! msg2.,则可以得到此输出

Message 2!
Receive {'DOWN',#Ref<0.0.0.108>,process,<0.48.0>,normal}
msg2

从此输出中,您可以知道该进程myFunction已终止。

(3)如果执行myFunction ! msg1,进程将陷入无限循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

外部函数调用Erlang

来自分类Dev

如果您在提交表单之前尝试重定向,会发生什么情况?

来自分类Dev

Erlang消息接收顺序

来自分类Dev

Erlang进程消息接收

来自分类Dev

Erlang butlast函数

来自分类Dev

Erlang sumif函数

来自分类Dev

Erlang中的函数链接

来自分类Dev

递归函数调用挂起,Erlang

来自分类Dev

如果您在不重新启动的情况下安装 2 个更新相同文件的更新,会发生什么情况,如果您不按顺序安装更新会发生什么情况?

来自分类Dev

如果调用析构函数并将分配的内存再次用于其他对象,会发生什么情况?

来自分类Dev

如果调用析构函数并将分配的内存再次用于其他对象,会发生什么情况?

来自分类Dev

安装erlang时发生错误

来自分类Dev

安装erlang时发生错误

来自分类Dev

Erlang中非终止函数的类型

来自分类Dev

在Erlang函数之外声明变量

来自分类Dev

Erlang中非终止函数的类型

来自分类Dev

在Erlang函数之外声明变量

来自分类Dev

erlang中的ref是什么?

来自分类Dev

什么是lists:zf / 2(Erlang)?

来自分类Dev

如果我删除Rabbitmq的“.erlang.cookie”文件会发生什么?

来自分类Dev

如果我在PHP函数的末尾不包含“返回”,会发生什么情况?

来自分类Dev

如果我在PHP函数的末尾不包含“ return”,会发生什么情况?

来自分类Dev

调试挂在Erlang中的函数调用

来自分类Dev

如何使用变量调用Erlang函数?

来自分类Dev

Erlang:包含模块和调用函数

来自分类Dev

如何在Elixir中调用Erlang函数

来自分类Dev

如何计算Erlang中的函数调用次数?

来自分类Dev

如何计算Erlang中的函数调用次数?

来自分类Dev

Erlang中的伪函数是什么?

Related 相关文章

热门标签

归档