gpt4 book ai didi

timer - 如何以精确时间(即 10 毫秒)定期运行 Erlang 进程

转载 作者:行者123 更新时间:2023-12-02 11:02:51 24 4
gpt4 key购买 nike

我想每 10 毫秒(基于挂钟时间)运行一个周期性的 erlang 进程,10 毫秒应该尽可能准确;实现它的正确方法应该是什么?

最佳答案

如果您想要真正可靠和准确的周期性过程,您应该使用 erlang:monotonic_time/0,1 依赖实际挂钟时间。 .如果您使用 Stratus3D 中的方法的 answer你最终会落后。

start_link(Period) when Period > 0, is_integer(Period) ->
gen_server:start_link({local, ?SERVER}, ?MODULE, Period, []).

...

init(Period) ->
StartT = erlang:monotonic_time(millisecond),
self() ! tick,
{ok, {StartT, Period}}.

...

handle_info(tick, {StartT, Period} = S) ->
Next = Period - (erlang:monotonic_time(millisecond)-StartT) rem Period,
_Timer = erlang:send_after(Next, self(), tick),
do_task(),
{noreply, S}.

你可以在shell中测试:
spawn(fun() ->
P = 1000,
StartT = erlang:monotonic_time(millisecond),
self() ! tick,
(fun F() ->
receive
tick ->
Next = P - (erlang:monotonic_time(millisecond)-StartT) rem P,
erlang:send_after(Next, self(), tick),
io:format("X~n", []),
F()
end
end)()
end).

关于timer - 如何以精确时间(即 10 毫秒)定期运行 Erlang 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41378523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com