多进程工作者的全局定时器 替代单进程工作模式的erlangtimer
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

55 строки
1.2 KiB

-module(gtWork).
-behavior(gen_srv).
-export([
start_link/1
]).
-export([
init/1
, handleCall/3
, handleCast/2
, handleInfo/2
, terminate/2
, code_change/3
]).
-record(state, {}).
%% ******************************************** API *******************************************************************
start_link(SrvName) ->
gen_srv:start_link({local, SrvName}, ?MODULE, [], []).
%% ******************************************** callback **************************************************************
init(_Args) ->
{ok, #state{}}.
handleCall(_Msg, _State, _FROM) ->
{reply, ok}.
%% 默认匹配
handleCast(_Msg, _State) ->
kpS.
handleInfo({timeout, TimerRef, MFA}, _State) ->
%% 确认Msg格式 然后做分发处理
{M, F, A} = MFA,
try M:F(A, TimerRef)
catch C:R ->
error_logger:error_msg("gTimer timeout error MFA:~p C:~p R:~p~n", [MFA, C, R])
end,
kpS;
handleInfo(_Msg, _State) ->
kpS.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
%% ****************************************************** logic ********************************************************