【发布时间】:2019-10-31 23:45:30
【问题描述】:
Erlang 中是否有任何函数在给定时间后自动被调用,一旦触发它应该在给定时间后自动调用,应该不需要触发它一次又一次。我正在用 Erlang 编写一个模块,它在 ejabberd server 上执行清理任务。该模块一旦触发,需要每天自动调用。有什么指点吗?
【问题讨论】:
Erlang 中是否有任何函数在给定时间后自动被调用,一旦触发它应该在给定时间后自动调用,应该不需要触发它一次又一次。我正在用 Erlang 编写一个模块,它在 ejabberd server 上执行清理任务。该模块一旦触发,需要每天自动调用。有什么指点吗?
【问题讨论】:
库timer提供了几个功能:
apply_after, send_after 允许在一定时间后执行函数或发送消息,
apply_interval, send_interval 允许定期执行功能或发送消息。
结合 apply_after 和 apply_interval 或发送间隔,您应该能够做您想做的事。
【讨论】:
见timer:apply_after/4。
例子:
-module(my_module).
-export([foo/1]).
foo(Text) ->
error_logger:info_msg(Text, []).
10000 毫秒后调用 foo:
timer:apply_after(10000, my_module, foo, ["Hello!"]).
【讨论】:
您可以使用erlang:send_after 或erlang:start_timer 来执行功能或执行其他操作。同时,你可以使用timer:apply_after,但可能会导致CPU使用率很高,因为定时器是一个单独的进程来管理定时器。使用erlang:send_after/3 和erlang:start_timer/3 创建定时器比使用定时器模块提供的定时器要高效得多。
【讨论】: