【发布时间】:2013-09-29 09:40:15
【问题描述】:
有人知道是否可以在 Erlang 中制作高分辨率计时器吗?
根据文档,所有计时器和超时都以毫秒为单位。
需要以微秒为单位进行延迟。例如,代替timer:apply_after(MilliSec, Module, Function, Arguments).
类似timer:apply_after(MicroSec, Module, Function, Arguments).
【问题讨论】:
有人知道是否可以在 Erlang 中制作高分辨率计时器吗?
根据文档,所有计时器和超时都以毫秒为单位。
需要以微秒为单位进行延迟。例如,代替timer:apply_after(MilliSec, Module, Function, Arguments).
类似timer:apply_after(MicroSec, Module, Function, Arguments).
【问题讨论】:
确实,所有计时器和超时原语都以毫秒为单位,包括:
receive ... after 原语(这是 timer 模块最终所依赖的);erlang:send_after/3 和 erlang:start_timer/3 依赖相同的机制;driver_set_timer 用于链接驱动程序的函数。可以考虑两种方法来实现亚毫秒级计时器:
erlang:now() 不是实时函数,因为它保证是单调的(而且这非常昂贵)。你应该改用os:timestamp();【讨论】:
【讨论】: