非常教程

Erlang 20参考手册

stdlib

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微秒为单位的时间差,其中T1T2时间元组的格式与从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/4send_after/3send_after/2exit_after/3exit_after/2kill_after/2,和kill_after/1没有连接到任何进程。因此,这样一个计时器只有在到达超时时间时才会被删除,或者如果通过呼叫被明确删除cancel/1

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1