最近上班比较忙,没时间学习erlang ,实在对不起自己啊,以前一直在找erlang相关的教程,终于找到一个了,这个网站是前几天才开始运行的,以后的文章可能都是来自于那里,网站是http://www.erlang-cn.com ,大家忙没事多学习!
并发编程一:
-module(tut15).
-export([start/0,ping/2,pong/0]).
ping(0,Pong_PID) ->
%%想对方发送退出信号
Pong_PID ! finished,
io:format("ping finished~n",Pong_PID);
ping(N,Pong_PID) ->
Pong_PID ! {ping,self()},
receive
pong ->
io:format("Ping receive pong ~n",[])
end,
%%继续接受信息,直到 N == 0
ping(N-1,Pong_PID).
pong() ->
receive
finished ->
io:format("Pong finished~n",[]);
{ping,Ping_PID} ->
io:format("Pong received ping ~n",[]),
Ping_PID!pong,
%%再次等待对方的信息,直到信息为ffinished
pong()
end.
start() ->
%% 开启一个进程,用来等待其他进程的信息
Pong_PID = spawn(tut15,pong,[]),
%%开启一个进程,用来发送信息
spawn(tut15,ping,[3,Pong_PID]),
io:format("Main Process Exit~n",[]).
进程的标识 ,我们还有一种更加灵活的方法来标记她
那就是使用register函数
-module(tut16).
-export([start/0,ping/1,pong/0]).
ping(0) ->
pong ! finished,
io:format("ping finished ~n",[]);
ping(N) ->
%% send the message to pong proccess
pong ! {ping,self()},
receive
pong ->
io:format("Ping received pong ~n",[])
end ,
ping(N-1).
pong() ->
receive
finished ->
io:format("Pong finished~n",[]);
{ping,Ping_PID} ->
io:format("Pong received ping~n",[]),
Ping_PID ! pong,
pong()
end.
start() ->
register(pong,spawn(tut16,pong,[])),
spawn(tut16,ping,[3]).