3 multithreading timer elixir erlang-otp
我想创建一个以间隔运行函数的程序。我对 Elixir 还是很陌生,不知道从哪里开始。我的想法是,由于我们可以GenServer用来创建一个程序来等待消息的循环,我可以向它提供一条消息(也许:kick),当它收到这条消息时,它会运行该函数。
但是,这留下了一个问题 - 我如何在没有 cron 工作的情况下踢它?我可以启动一个线程并运行一个计时器,以间隔时间启动它吗?如果主线程死了 - 有没有一种简单的方法来通知并重新启动它?
谢谢!
您可以timer:send_interval/2与 GenServer 一起使用。您需要从init/1回调中调用该函数,然后处理来自handle_info回调的滴答消息。这是一个每秒打印 0, 1, 2, ... 的示例:
defmodule A do
use GenServer
def init(_) do
:timer.send_interval(1000, :tick)
{:ok, 0}
end
def handle_info(:tick, state) do
IO.inspect state
{:noreply, state + 1}
end
end
Run Code Online (Sandbox Code Playgroud)
iex(1)> GenServer.start_link(A, [])
{:ok, #PID<0.94.0>}
0
1
2
3
4
...
Run Code Online (Sandbox Code Playgroud)
如果主线程死了 - 有没有一种简单的方法来通知并重新启动它?
你应该看看Supervisors。上面的 GenServer 可以作为“工人”添加到主管。如果 GenServer 出于任何原因退出,Supervisor 可以处理重新启动 GenServer。
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |