唤醒睡眠过程 - Erlang

时间:2014-03-16 11:04:39

标签: erlang

在Erlang被发送到无限远睡眠状态后,是否可以在Erlang中外部唤醒进程?

我想从一个不同的进程中唤醒它,它确实保存了进程的进程ID。

我在想要睡觉的过程中使用了这个:

timer:sleep(infinity)

如果无法从外部唤醒它,我还有哪些其他选择?

2 个答案:

答案 0 :(得分:8)

不是使用timer:sleep/1,而是将进程放入receive,以便等待消息。当其他进程希望它继续时,它可以简单地向它发送消息。假设消息与receive正在查找的内容相匹配,则第一个进程将退出receive并继续。

答案 1 :(得分:1)

从这个函数的源代码:

-spec sleep(Time) -> 'ok' when
  Time :: timeout().
sleep(T) ->
    receive
    after T -> ok
    end.

你可以发现sleep让进程等待,什么都不做。

如果你想要唤醒这个过程,你需要向休眠过程发送消息并执行receive