-module(gTimer). -include("gTimer.hrl"). -export([ start/0 , stop/0 , startWork/1 , setTimer/2 , getTimer/1 , delTimer/1 ]). timerName(Idx) -> binary_to_atom(<<"$gtWSork_", (integer_to_binary(Idx))/binary>>). startWork(Cnt) when Cnt > 0 -> case ?gTimerCfg:getV(?workCnt) of 0 -> NameList = [{Idx, timerName(Idx)} || Idx <- lists:seq(1, Cnt)], [supervisor:start_child(gTimer_sup, [WorkName]) || {_Idx, WorkName} <- NameList], CfgList = [{?workCnt, Cnt} | NameList], gtKvsToBeam:load(?gTimerCfg, CfgList), ok1; _Cnt -> {error, started} end. start() -> application:ensure_all_started(gTimer). stop() -> gtKvsToBeam:load(?gTimerCfg, [{?workCnt, 0}]), application:stop(gTimer). setTimer(Time, Msg) -> Cnt = ?gTimerCfg:getV(?workCnt), Idx = 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).