|
|
@ -12,11 +12,10 @@ |
|
|
|
, delTimer/1 |
|
|
|
]). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
timerName(Idx) -> |
|
|
|
binary_to_atom(<<"$gtWSork_", (integer_to_binary(Idx))/binary>>). |
|
|
|
|
|
|
|
-spec startWork(Cnt :: non_neg_integer()) -> ok | {error, term()}. |
|
|
|
startWork(Cnt) when Cnt > 0 -> |
|
|
|
case ?gTimerCfg:getV(?workCnt) of |
|
|
|
0 -> |
|
|
@ -24,7 +23,7 @@ startWork(Cnt) when Cnt > 0 -> |
|
|
|
[supervisor:start_child(gTimer_sup, [WorkName]) || {_Idx, WorkName} <- NameList], |
|
|
|
CfgList = [{?workCnt, Cnt} | NameList], |
|
|
|
gtKvsToBeam:load(?gTimerCfg, CfgList), |
|
|
|
ok1; |
|
|
|
ok; |
|
|
|
_Cnt -> |
|
|
|
{error, started} |
|
|
|
end. |
|
|
@ -36,25 +35,22 @@ stop() -> |
|
|
|
gtKvsToBeam:load(?gTimerCfg, [{?workCnt, 0}]), |
|
|
|
application:stop(gTimer). |
|
|
|
|
|
|
|
setTimer(Time, Msg) -> |
|
|
|
-spec setTimer(Time :: non_neg_integer(), MFA :: {module(), atom(), term()}) -> reference(). |
|
|
|
setTimer(Time, MFA) -> |
|
|
|
Cnt = ?gTimerCfg:getV(?workCnt), |
|
|
|
Idx = rand:uniform(Cnt), |
|
|
|
erlang:start_timer(Time, ?gTimerCfg:getV(Idx), Msg). |
|
|
|
erlang:start_timer(Time, ?gTimerCfg:getV(Idx), MFA). |
|
|
|
|
|
|
|
setTimer(Time, Msg, Strategy) -> |
|
|
|
-spec setTimer(Time :: non_neg_integer(), MFA :: {module(), atom(), term()}, Strategy :: rand | bind) -> reference(). |
|
|
|
setTimer(Time, MFA, Strategy) -> |
|
|
|
Cnt = ?gTimerCfg:getV(?workCnt), |
|
|
|
Idx = ?IIF(Strategy == rand, rand:uniform(Cnt), erlang:phash2(self(), Cnt) + 1), |
|
|
|
erlang:start_timer(Time, ?gTimerCfg:getV(Idx), Msg). |
|
|
|
erlang:start_timer(Time, ?gTimerCfg:getV(Idx), MFA). |
|
|
|
|
|
|
|
-spec getTimer(TimerRef :: reference()) -> false | non_neg_integer(). |
|
|
|
getTimer(TimerRef) -> |
|
|
|
erlang:read_timer(TimerRef). |
|
|
|
|
|
|
|
-spec delTimer(TimerRef :: reference()) -> false | non_neg_integer(). |
|
|
|
delTimer(TimerRef) -> |
|
|
|
erlang:cancel_timer(TimerRef) . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
erlang:cancel_timer(TimerRef) . |