не пойму как работать с приостановкой процесса — не получается повторно запустить остановленный по suspend процесс.
вот код тестового модуля
-module(test).
p() ->
receive
{system, _From, resume} ->
sys:resume(self());
{system, _From, suspend} ->
sys:suspend(self());
{Msg} ->
io:format("received ~p~n",[Msg]),
p()
end.
запускал так
1> c(test).
{ok,test}
2> T1 = spawn(test,p,[]).
<0.38.0>
3> T1 ! {1}.
received 1
{1}
4> T1 ! {system,self(),suspend}.
{system,<0.31.0>,suspend}
5> T1 ! {2}.
{2}
6> T1 ! {system,self(),resume}.
{system,<0.31.0>,resume}
7> T1 ! {3}.
{3}
8> sys:resume(T1).
** exited: {noproc,{sys,resume,[<0.38.0>]}} **
9> T1 ! {4}.
{4}
после этого решил попробовать так
ps() ->
receive
{system, suspend} ->
put(state, suspend);
{system, resume} ->
put(state, resume)
after 0 ->
ok
end,
State = get(state),
if State == suspend ->
ps();
true ->
receive
{stop} ->
ok;
{Msg} ->
io:format("received ~p~n", [Msg]),
ps()
end
end.
но тогда ожидание получается активным, да и вообще криво как-то
как заставить sys:suspend и sys:resume работать?