ソースを参照

ft: 多工作者的全局定时器

master
SisMaker 3年前
コミット
9954115508
2個のファイルの変更12行の追加3行の削除
  1. +4
    -1
      include/gTimer.hrl
  2. +8
    -2
      src/gTimer.erl

+ 4
- 1
include/gTimer.hrl ファイルの表示

@ -2,4 +2,7 @@
-define(gTimerCfg, gTimerCfg).
%%
-define(workCnt, workCnt).
-define(workCnt, workCnt).
%%
-define(IIF(Cond, Ret1, Ret2), (case Cond of true -> Ret1; _ -> Ret2 end)).

+ 8
- 2
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) .

読み込み中…
キャンセル
保存