[Erlang]как работать с sys:suspend?
От: Аноним  
Дата: 04.06.07 08:00
Оценка:
не пойму как работать с приостановкой процесса — не получается повторно запустить остановленный по 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 работать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.