我有以下代码:
send_event_at({TsMsec,Msg}) ->
Now = os:system_time(micro_seconds),
NowMsec = erlang:convert_time_unit(Now,micro_seconds,milli_seconds),
DelayMsec = TsMsec - NowMsec,
if DelayMsec >= 0 ->
erlang:send_after(DelayMsec,self(),Msg);
true -> ignore
end.
然后在 gen_fsm 我将这些消息处理为:
handle_info({new_status,{Status,HrQtKey}},StateName,State) ->
.....
{next_state,StateName,State};
用于发送延迟最多 48 小时的消息的代码。大多数时候一切都很好。
但是,如果我的 gen_fsm 有大量传入消息,则 new_status 消息最多会延迟 15 分钟。
这个错误出现的频率并不高,但确实很烦人。
并知道可能是什么原因以及解决它的最佳方法是什么?