timer
timer(计时器)
模块
timer(计时器)
模块摘要
计时器功能。
描述
该模块提供了与时间相关的有用功能。除非另有说明,否则时间总是以毫秒为单位
。所有计时器函数都会立即返回,而不管其他进程是否完成了工作
定时器函数的成功评估给出了包含定时器参考的返回值,表示为TRef。 通过使用取消/ 1,可以使用返回的引用来取消任何请求的操作。 TRef是一个Erlang术语,其内容不得改变。
超时并不准确,但至少
与要求的一样长。
数据类型
time() = integer() >= 0
时间以毫秒为单位。
tref()
计时器参考。
输出
apply_after(Time, Module, Function, Arguments) ->
{ok, TRef} | {error, Reason}
类型
毫秒apply(Module, Function, Arguments)
后评估Time
。
返回{ok, TRef}
或{error, Reason}
。
apply_interval(Time, Module, Function, Arguments) ->
{ok, TRef} | {error, Reason}
类型
apply(Module, Function, Arguments)
每隔一段时间重复评估一次Time
。
返回{ok, TRef}
或{error, Reason}
。
cancel(TRef) -> {ok, cancel} | {error, Reason}
类型
取消先前请求的超时。TRef
是由相关定时器功能返回的唯一定时器参考。
当TRef不是定时器引用时返回{ok, cancel}
或{error, Reason}
exit_after(Time, Reason1) -> {ok, TRef} | {error, Reason2}
exit_after(Time, Pid, Reason1) -> {ok, TRef} | {error, Reason2}
类型
exit_after/2
类似于exit_after(Time, self(), Reason1)
。
exit_after/3
发送带有理由的退出信号Reason1
给pid Pid
。返回{ok, TRef}
或{error, Reason2}
。
hms(Hours, Minutes, Seconds) -> MilliSeconds
类型
返回Hours + Minutes + Seconds
中的毫秒数
hours(Hours) -> MilliSeconds
类型
返回Hours
中的毫秒数
kill_after(Time) -> {ok, TRef} | {error, Reason2}
kill_after(Time, Pid) -> {ok, TRef} | {error, Reason2}
类型
kill_after/1
类似于exit_after(Time, self(), kill)
。
kill_after/2
类似于exit_after(Time, Pid, kill)
...
minutes(Minutes) -> MilliSeconds
类型
返回Minutes
中的毫秒数
now_diff(T2, T1) -> Tdiff
类型
微秒
计算Tdiff = T2 - T1
以微秒为单位
的时间差,其中T1
和T2
时间元组的格式与从erlang:timestamp/0
或返回的格式相同os:timestamp/0
。
seconds(Seconds) -> MilliSeconds
类型
返回Seconds
中的毫秒数
send_after(Time, Message) -> {ok, TRef} | {error, Reason}
send_after(Time, Pid, Message) -> {ok, TRef} | {error, Reason}
类型
send_after/3
毫秒Pid ! Message
后评估Time
。(Pid
也可以是注册名称的原子。)
返回{ok, TRef}
或{error, Reason}
。
send_after/2
类似于send_after(Time, self(), Message)
。
send_interval(Time, Message) -> {ok, TRef} | {error, Reason}
send_interval(Time, Pid, Message) -> {ok, TRef} | {error, Reason}
类型
send_interval/3
毫秒Pid ! Message
后重复评估Time
。(Pid
也可以是注册名称的原子。)
返回{ok, TRef}
或{error, Reason}
。
send_interval/2
类似于send_interval(Time, self(), Message)
。
sleep(Time) -> ok
类型
暂停调用该函数Time
几毫秒的进程,然后返回ok
,或者如果Time
是原子,则永久挂起进程infinity
。当然,这个功能并没有
立即返回。
start() -> ok
启动计时器服务器。通常,服务器不需要明确启动。如果需要,它会动态启动。这在开发过程中很有用,但在目标系统中,服务器将明确启动。Kernel
为此使用配置参数。
tc(Fun) -> {Time, Value}
tc(Fun, Arguments) -> {Time, Value}
tc(Module, Function, Arguments) -> {Time, Value}
类型
微秒
tc/3
评估适用(模块,函数,参数)并测量os:timestamp / 0报告的已用实时。
返回{Time, Value}
,其中Time
是经过的实时(以微秒为单位)
,并且Value
是从apply返回的值。
tc/2
评估apply(Fun, Arguments)
。否则类似于tc/3
。
tc/1
评估Fun()
。否则类似于tc/2
。
实例
例1
以下示例显示如何打印“Hello World!” 在5秒内:
1> timer:apply_after(5000, io, format, ["~nHello World!~n", []]).
{ok,TRef}
Hello World!
例2
以下示例显示执行特定操作的进程,如果此操作未在特定限制内完成,则会终止该进程:
Pid = spawn(mod, fun, [foo, bar]),
%% If pid is not finished in 10 seconds, kill him
{ok, R} = timer:kill_after(timer:seconds(10), Pid),
...
%% We change our mind...
timer:cancel(R),
...
注记
定时器总是可以通过调用cancel/1
来删除。
间隔定时器,即通过评估任何函数apply_interval / 4,send_interval / 3和send_interval / 2创建的定时器链接到定时器执行其任务的进程。
甲单次计时器,也就是,通过评估的任何功能创造了一个定时器apply_after/4
,send_after/3
,send_after/2
,exit_after/3
,exit_after/2
,kill_after/2
,和kill_after/1
没有连接到任何进程。因此,这样一个计时器只有在到达超时时间时才会被删除,或者如果通过呼叫被明确删除cancel/1
。