erlang 之时钟

今天来看一下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> 



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值