startTrains() ->
TotalDist = 100,
Trains = [trainA,trainB ],
PID = spawn(fun() ->
train(1,length(Trains)) end),
[ PID ! {self(),TrainData,TotalDist} || TrainData <- Trains],
receive
{_From, Mesg} ->
error_logger:info_msg("~n Mesg ~p ~n",[Mesg])
after 10500 ->
refresh
end.
因此,我创建了两个进程,分别命名为trainA和trainB。我想把这个过程加5直到100。我做了不同的进程,使每一列火车(进程)平行地增加其位置。但是我很惊讶地得到了顺序的输出,即进程trainA结束,然后进程trainB开始。但我想同时增加自己。我想运行这样的进程
trainA 10 trainB 0
trainA 15 trainB 5
....
trainA 100 trainB 100
但我得到了
trainA 0
....
trainA 90
trainA 95
trainA 100
trainA ends
trainB 0
trainB 5
trainB 10
.....
trainB 100
如何使进程并行/同时运行?希望你能得到我的Q。请帮帮我
1条答案
按热度按时间dxpyg8gm1#
只生成一个由函数
train/2
初始化的进程。您提供的代码不完整,所以我只能猜测,但我认为您的代码是错误的,因为您只有一个训练过程。灵感来源:但是如果我认真考虑的话,我应该看看
gen_fsm
和OTP原则。但在当前阶段,继续使用erlang原语,以获得更好的感觉。