今天来看一下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.
13> Pid=self(), 13> timer:timer(Pid,1000,hellword). hellword 14>
原文:http://blog.csdn.net/laohan_/article/details/20810347