读书人

Erlang的过程之间的信号传递

发布时间: 2013-04-02 12:35:26 作者: rapoo

Erlang的进程之间的信号传递

-module(testLinkProcess).-export([test/1]).-export([test1/0]).-export([test2/0]).-export([test3/0]).-export([test4/0]).-export([loopWithCounter/3]).test(Num) ->case Num of1 -> spawn(testLinkProcess,test1,[]);2 -> spawn(testLinkProcess,test2,[]);3 -> spawn(testLinkProcess,test3,[]);4 -> spawn(testLinkProcess,test4,[]);_ -> voidend.%%2个进程都不是系统进程,相互link。%%正常退出没有相互影响。%%监听不到正常退出信号。test1() ->spawn_link(testLinkProcess,loopWithCounter,[100, 10,true]),receiveAny -> io:format("process exit : ~p ~n",[Any])after 3000 ->io:format("no singal.~n",[])end,loopWithCounter(100,10,true).%%2个进程都不是系统进程,相互link。%%异常退出时同时退出。%%监听不到异常退出信号。test2() ->spawn_link(testLinkProcess,loopWithCounter,[100, 10,false]),receiveAny -> io:format("process exit : ~p ~n",[Any])after 3000 ->io:format("no singal.~n",[])end,loopWithCounter(100,10,true).%%2个进程有1个系统进程,相互link。%%正常进程正常退出时系统进程不会退出。%%系统进程可以捕获到正常退出信号。test3() ->process_flag(trap_exit,true),spawn_link(testLinkProcess,loopWithCounter,[100, 10,true]),receiveAny -> io:format("process exit : ~p ~n",[Any])after 3000 ->io:format("no singal.~n",[])end,loopWithCounter(100,10,true).%%2个进程有1个系统进程,相互link。%%正常进程异常退出时系统进程不会退出。%%系统进程可以捕获到异常退出信号。test4() ->process_flag(trap_exit,true),spawn_link(testLinkProcess,loopWithCounter,[100, 10,false]),receiveAny -> io:format("process exit : ~p ~n",[Any])after 3000 ->io:format("no singal.~n",[])end,loopWithCounter(100,10,true).%%Flag为true时正常执行。%%Flag为false时抛异常。loopWithCounter(Time,Counter,Flag) ->io:format("~p ~p ~n",[self(),Counter]),receiveafter Time ->case Counter>0 oftrue ->   loopWithCounter(Time,Counter-1,Flag);false ->case Flag oftrue -> void;false -> 1/Counterendendend.

读书人网 >编程

热点推荐