diff --git a/include/gTimer.hrl b/include/gTimer.hrl index 894a1d9..8836c90 100644 --- a/include/gTimer.hrl +++ b/include/gTimer.hrl @@ -2,4 +2,7 @@ -define(gTimerCfg, gTimerCfg). %% 工作者数量 --define(workCnt, workCnt). \ No newline at end of file +-define(workCnt, workCnt). + +%% 三元表达式 +-define(IIF(Cond, Ret1, Ret2), (case Cond of true -> Ret1; _ -> Ret2 end)). \ No newline at end of file diff --git a/src/gTimer.erl b/src/gTimer.erl index 003af68..4a4ab3f 100644 --- a/src/gTimer.erl +++ b/src/gTimer.erl @@ -7,6 +7,7 @@ , stop/0 , startWork/1 , setTimer/2 + , setTimer/3 , getTimer/1 , delTimer/1 ]). @@ -37,14 +38,19 @@ stop() -> setTimer(Time, Msg) -> Cnt = ?gTimerCfg:getV(?workCnt), - Idx = erlang:phash2(self(), Cnt) + 1, + Idx = rand:uniform(Cnt), + erlang:start_timer(Time, ?gTimerCfg:getV(Idx), Msg). + +setTimer(Time, Msg, 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). getTimer(TimerRef) -> erlang:read_timer(TimerRef). delTimer(TimerRef) -> - erlang:cancel_timer(TimerRef). + erlang:cancel_timer(TimerRef) .