Erlang入门:进程实例操作与练习1
%% @author Rolong<rolong at vip dot qq dot com> -module(process1). -compile(export_all). -define(I(F), io:format(F++"~n", [])). -define(I(F, A), io:format(F++"~n", A)). %% Usage: %% %% 启动进程:Pid = process1:start(Fun). %% Fun = fun1 | fun3 | fun3 ... %% %% 发送消息 Pid ! Message. %% Message = term() start(Fun)-> spawn(?MODULE,Fun,[]). %%'-------- fun -------- %%'fun1 进程立即结束 %% 用erlang:is_process_alive(Pid)检查进程是否存在 fun1()-> ?I("I'm fun1.~n"). %%. %%'fun2 进程收到一个消息后结束 %% 用erlang:is_process_alive(Pid)检查进程是否存在 %% 发送消息:Pid ! message fun2()-> receive Msg -> ?I("I'm fun2, received: p", [Msg]) end. %%. %%'fun3 进程不会结束 %% 结束方法: %% exit(Pid, Reason) fun3()-> receive Msg -> ?I("I'm fun3, received: p", [Msg]), %% 回调自己 fun3() end. %%. %%'fun4 增加结束方法 %% 进程收到stop消息后结束 %% 结束方法: %% 1、 exit(Pid, Reason) %% 2、 Pid ! stop fun4()-> receive stop -> ?I("fun4 received stop."), %% 不再回调自己,进程结束 ok; Msg -> ?I("I'm fun4, received: p", [Msg]), %% 回调自己 fun4() end. %%. %%'fun5 增加询问功能 %% 询问方法:Pid ! who fun5()-> receive who -> ?I("I'm fun5~n"), fun5(); stop -> ok; Msg -> ?I("I'm fun1, receive: p", [Msg]), fun5() end. %%. %%'fun6 进程不会处理处理stop以外的任何消息 %% 未处理的消息会累积在进程消息队列里 %% 用erlang:process_info(Pid)查看进程信息 fun6()-> receive stop -> ok end. %%. %%'fun7 增加超时处理,超时后结束 %% 进程在8秒内没有收到任何消息就结束 fun7()-> receive Msg -> ?I("I'm fun7, receive: ~p", [Msg]), fun7() after 8000 -> ?I("I'm fun7, timeout, STOP.~n") end. %%. %%'fun8 增加超时处理,超时后不结束 %% 进程在8秒内没有收到任何消息就结束 fun8()-> receive Msg -> ?I("I'm fun8(~w), receive: ~p", [self(), Msg]), fun8() after 5000 -> ?I("I'm fun8(~w), 5s elapsed, waiting for you...", [self()]), fun8() end. %%. %%.fun end %% vim: set filetype=erlang foldmarker=%%',%%. foldmethod=marker:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。