多进程工作者的全局定时器 替代单进程工作模式的erlangtimer
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

55 Zeilen
1.2 KiB

  1. -module(gtWork).
  2. -behavior(gen_srv).
  3. -export([
  4. start_link/1
  5. ]).
  6. -export([
  7. init/1
  8. , handleCall/3
  9. , handleCast/2
  10. , handleInfo/2
  11. , terminate/2
  12. , code_change/3
  13. ]).
  14. -record(state, {}).
  15. %% ******************************************** API *******************************************************************
  16. start_link(SrvName) ->
  17. gen_srv:start_link({local, SrvName}, ?MODULE, [], []).
  18. %% ******************************************** callback **************************************************************
  19. init(_Args) ->
  20. {ok, #state{}}.
  21. handleCall(_Msg, _State, _FROM) ->
  22. {reply, ok}.
  23. %% 默认匹配
  24. handleCast(_Msg, _State) ->
  25. kpS.
  26. handleInfo({timeout, TimerRef, MFA}, _State) ->
  27. %% 确认Msg格式 然后做分发处理
  28. {M, F, A} = MFA,
  29. try M:F(A, TimerRef)
  30. catch C:R ->
  31. error_logger:error_msg("gTimer timeout error MFA:~p C:~p R:~p~n", [MFA, C, R])
  32. end,
  33. kpS;
  34. handleInfo(_Msg, _State) ->
  35. kpS.
  36. terminate(_Reason, _State) ->
  37. ok.
  38. code_change(_OldVsn, State, _Extra) ->
  39. {ok, State}.
  40. %% ****************************************************** logic ********************************************************