首页 > 其他 > 详细

erlang 之时钟

时间:2014-03-09 08:13:00      阅读:402      评论:0      收藏:0      [点我收藏+]

今天来看一下erlang中的时钟如何实现的:


-module(timeout).
-export([sleep/1,flush_buffer/0]).



%%%睡眠函数
sleep(Time)	->
	receive 
		after Time ->
		true
	end.

%%%清空邮箱

flush_buffer()	->
	receive 
		AnyMessage	->
			flush_buffer()
		after	0 	->
			true
	end.

%%% 消息优先级的实现
%% 函数priority_receive会返回邮箱中第一个消息,除非有消息interrupt发送到了邮箱中,此时将返
%%回interrupt。通过首先使用超时时长0来调用receive去匹配interrupt,我们可以检查邮箱中是否已经有了
%%%这个消息。如果是,我们就返回它,否则,我们再通过模式AnyMessage去调用receive,这将选中邮箱中的
%%第一条消息。
priority_receive()	->
	receive
		interrupt	->
			interrupt
		after 	0	->
			receive
				AnyMessage	->
					AnyMessage
			end
	end.

上面主要是睡眠 和清空“邮箱” ,还有就是优先级的简单实现.

下面再来一段吧:

-module(timer).
-export([timeout/2,cancel/1,timer/3]).

timeout(Time,Alarm)	->
	spawn(timer,timer,[self(),Time,Alarm]).


cancel(Timer)	->
	Timer !	{self(),cancel}.
timer(Pid,Time,Alarm)	->
	receive 	
		{Pid,cancel}	->
			true
	after	Time	->
		Pid ! Alarm
	end.

shell中演示一下:

13> Pid=self(),
13> timer:timer(Pid,1000,hellword).
hellword
14> 



erlang 之时钟,布布扣,bubuko.com

erlang 之时钟

原文:http://blog.csdn.net/laohan_/article/details/20810347

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!