|
|
@ -3,14 +3,14 @@ |
|
|
|
-include("eFaw.hrl"). |
|
|
|
|
|
|
|
-export([ |
|
|
|
start/0 %% 启动应用 |
|
|
|
, stop/0 %% 停止应用 |
|
|
|
, openF/2 %% 开个工厂 |
|
|
|
, closeW/1 %% 关闭工厂 |
|
|
|
, hireW/3 %% 录用工人 |
|
|
|
, inWork/2 %% 插入异步工作 |
|
|
|
, inWorks/2 %% 插入异步工作 |
|
|
|
, syncWork/4 %% 插入同步工作 并等待返回结果 |
|
|
|
start/0 %% start app |
|
|
|
, stop/0 %% stop app |
|
|
|
, openF/2 %% Open a factory |
|
|
|
, closeF/1 %% close a factory |
|
|
|
, hireW/3 %% hire worker |
|
|
|
, inWork/2 %% Insert async task |
|
|
|
, inWorks/2 %% Insert async tasks |
|
|
|
, syncWork/4 %% Insert sync task And wait for the result to receive |
|
|
|
]). |
|
|
|
|
|
|
|
start() -> |
|
|
@ -53,7 +53,7 @@ hireW(WorkerNum, FName, IsTmp) when is_integer(WorkerNum), WorkerNum > 0 -> |
|
|
|
hireW(_WorkerNum, _FName, _IsTmp) -> |
|
|
|
ok. |
|
|
|
|
|
|
|
closeW(FName) -> |
|
|
|
closeF(FName) -> |
|
|
|
supervisor:terminate_child(eFaw_sup, FName). |
|
|
|
|
|
|
|
-spec inWork(FName :: atom(), Work :: term()) -> true | false. |
|
|
@ -64,14 +64,14 @@ inWork(FName, Work) -> |
|
|
|
WFCnt = FName:getV(?wFCnt), |
|
|
|
if |
|
|
|
FTaskLen > FTMax -> |
|
|
|
%% 查看是否超过工厂负载; |
|
|
|
%% The factory is overloaded |
|
|
|
false; |
|
|
|
FTaskLen == FTLfl -> |
|
|
|
%% 查看是否需要雇佣零时工 ; |
|
|
|
%% See factory if need to hire hourly worker |
|
|
|
gen_srv:send(fwFMgr, mChAddW), |
|
|
|
fwQueue:in(FName, Work); |
|
|
|
FTaskLen < WFCnt -> |
|
|
|
%% 查看是否需要唤醒空闲的工人 |
|
|
|
%% See if need to wake up idle workers |
|
|
|
gen_srv:send(fwFMgr, mChAwkW), |
|
|
|
fwQueue:in(FName, Work); |
|
|
|
true -> |
|
|
@ -86,14 +86,14 @@ inWorks(FName, Works) -> |
|
|
|
WFCnt = FName:getV(?wFCnt), |
|
|
|
if |
|
|
|
FTaskLen > FTMax -> |
|
|
|
%% 查看是否超过工厂负载; |
|
|
|
%% The factory is overloaded. |
|
|
|
false; |
|
|
|
FTaskLen == FTLfl -> |
|
|
|
%% 查看是否需要雇佣零时工 ; |
|
|
|
%% See factory if need to hire hourly worker |
|
|
|
gen_srv:send(fwFMgr, mChAddW), |
|
|
|
fwQueue:ins(FName, Works); |
|
|
|
FTaskLen < WFCnt -> |
|
|
|
%% 查看是否需要唤醒空闲的工人 |
|
|
|
%% See if need to wake up idle workers |
|
|
|
gen_srv:send(fwFMgr, mChAwkW), |
|
|
|
fwQueue:ins(FName, Works); |
|
|
|
true -> |
|
|
@ -108,10 +108,10 @@ syncWork(FName, RetTag, Timeout, Work) -> |
|
|
|
WFCnt = FName:getV(?wFCnt), |
|
|
|
if |
|
|
|
FTaskLen > FTMax -> |
|
|
|
%% 查看是否超过工厂负载; |
|
|
|
%% The factory is overloaded. |
|
|
|
false; |
|
|
|
FTaskLen == FTLfl -> |
|
|
|
%% 查看是否需要雇佣零时工 ; |
|
|
|
%% See factory if need to hire hourly worker |
|
|
|
gen_srv:send(fwFMgr, mChAddW), |
|
|
|
fwQueue:in(FName, Work), |
|
|
|
receive |
|
|
@ -121,7 +121,7 @@ syncWork(FName, RetTag, Timeout, Work) -> |
|
|
|
timeout |
|
|
|
end; |
|
|
|
FTaskLen < WFCnt -> |
|
|
|
%% 查看是否需要唤醒空闲的工人 |
|
|
|
%% See if need to wake up idle workers |
|
|
|
gen_srv:send(fwFMgr, mChAwkW), |
|
|
|
fwQueue:in(FName, Work), |
|
|
|
receive |
|
|
|