在 erlang 中的给定时间后自动调用的函数

Function called automatically after a given time in erlang

Erlang 中是否有任何函数会在给定的时间后自动调用,并且一旦触发它应该在给定的时间后自动调用,应该有无需一次又一次地触发它。我正在用 Erlang 编写一个模块,它在 ejabberd server 上执行清理任务。该模块一旦触发,需要每天自动调用。有什么指点吗?

参见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!"]).

timer 提供几个函数:

  • apply_after, send_after 允许在一定时间后执行功能或发送消息,

  • apply_interval, send_interval 允许执行功能或定期发送消息。

结合使用 apply_after 和 apply_interval 或发送间隔,您应该能够做您想做的事。

您可以使用 erlang:send_aftererlang:start_timer 来执行功能或执行其他操作。同时,可以使用timer:apply_after,但可能会导致CPU的使用率过高,因为timer是一个单独的进程来管理timer。使用 erlang:send_after/3erlang:start_timer/3 创建定时器比使用定时器模块提供的定时器要高效得多。