lijie 2 лет назад
Родитель
Сommit
f8bf5ab639
2 измененных файлов: 36 добавлений и 22 удалений
  1. +35
    -21
      src/rank/rankTest.erl
  2. +1
    -1
      src/ranks.erl

+ 35
- 21
src/rank/rankTest.erl Просмотреть файл

@ -5,7 +5,7 @@
-include("ranks.hrl"). -include("ranks.hrl").
-export([ -export([
start_link/2
start_link/3
, start/3 , start/3
]). ]).
@ -19,26 +19,40 @@
]). ]).
start(Cnt, Num, Limit) -> start(Cnt, Num, Limit) ->
ranks:startWork(4) ,
io:format("start test ~p ~p ~p ~n", [Cnt, Num, erlang:system_time(second)]),
ranks:startWork(erlang:system_info(schedulers)) ,
[ranks:initRank(RankType, ceil(Limit * 0.6), Limit) || RankType <- ?AllRankType], [ranks:initRank(RankType, ceil(Limit * 0.6), Limit) || RankType <- ?AllRankType],
doTest(Cnt, Num).
doTest(Cnt, Num),
doWait(Cnt, 0).
doTest(0, _) -> doTest(0, _) ->
ok; ok;
doTest(Cnt, Num) -> doTest(Cnt, Num) ->
start_link(Cnt, Num),
start_link(self(), Cnt, Num),
doTest(Cnt - 1, Num). doTest(Cnt - 1, Num).
-record(state, {id, num}).
doWait(Cnt, Sum) ->
receive
over ->
if Cnt == Sum + 1 ->
io:format("end test ~p ~p ~n", [Cnt, erlang:system_time(second)]);
true ->
% io:format("doWait test ~p ~p ~n", [Cnt, Sum + 1]),
doWait(Cnt, Sum + 1)
end
end.
-record(state, {parent, id, num}).
%% ******************************************** API ******************************************************************* %% ******************************************** API *******************************************************************
start_link(Id, Num) ->
gen_srv:start_link(?MODULE, {Id, Num}, []).
start_link(Parent, Id, Num) ->
gen_srv:start(?MODULE, {Parent, Id, Num}, []).
%% ******************************************** callback ************************************************************** %% ******************************************** callback **************************************************************
init({Id, Num}) ->
init({Parent, Id, Num}) ->
ranks:updateInfo(Id, {?publicInfoPos, {Id, Num, self()}}), ranks:updateInfo(Id, {?publicInfoPos, {Id, Num, self()}}),
{ok, #state{id = Id, num = Num}, 0}.
{ok, #state{parent = Parent, id = Id, num = Num}, 0}.
handleCall(_Msg, _State, _FROM) -> handleCall(_Msg, _State, _FROM) ->
{reply, ok}. {reply, ok}.
@ -46,18 +60,10 @@ handleCall(_Msg, _State, _FROM) ->
handleCast(_Msg, _State) -> handleCast(_Msg, _State) ->
kpS. kpS.
handleInfo(timeout, #state{id = Id, num = Num} = State) ->
RankType = lists:nth(rand:uniform(3), ?AllRankType),
Score = rand:uniform(10000),
ranks:updateScore(RankType, Id, {Score, Id}),
NewNum = Num - 1,
case NewNum < 0 of
true ->
io:format("test over ~p~n", [Id]),
{stop, normal, State};
_ ->
{noreply, State#state{num = NewNum}, 0}
end;
handleInfo(timeout, #state{parent = Parent, id = Id, num = Num} = State) ->
loopScore(Num, Id),
Parent ! over,
{stop, normal, State};
handleInfo(_Msg, _State) -> handleInfo(_Msg, _State) ->
kpS. kpS.
@ -67,4 +73,12 @@ terminate(_Reason, _State) ->
code_change(_OldVsn, State, _Extra) -> code_change(_OldVsn, State, _Extra) ->
{ok, State}. {ok, State}.
%% ****************************************************** logic ******************************************************** %% ****************************************************** logic ********************************************************
loopScore(0, _Id) ->
ok;
loopScore(Num, Id) ->
RankType = lists:nth(rand:uniform(3), ?AllRankType),
Score = rand:uniform(10000),
ranks:updateScore(RankType, Id, {Score, Id}),
loopScore(Num - 1, Id).

+ 1
- 1
src/ranks.erl Просмотреть файл

@ -7,7 +7,7 @@
, stop/0 , stop/0
, startWork/1 %% , startWork/1 %%
, initRank/3 %% , initRank/3 %%
, updateScore/3 %%
, updateScore/3 %% todo
, updateInfo/2 %% , updateInfo/2 %%
, getRankInfo/5 %% , getRankInfo/5 %%
]). ]).

Загрузка…
Отмена
Сохранить