2012-10-23 128 views
0

是否有一種簡單的方法來暫停/暫停整個Erlang程序而不使用操作系統命令(例如Windows的sysinternals pssuspend)?暫停/掛起整個Erlang程序

理想情況下,我想恢復從外部程序返回的程序。

+0

對於要這個幹什麼? – W55tKQbuRu28Q4xv

+0

我有兩個模型; Erlang的控制/通信網絡模型以及Matlab中的電力網絡模型。我需要暫停我的通信模型,同時更新電網模型。 – atomh33ls

+0

我假設你使用Erlang作爲你的Matlab模型和外部世界之間的橋樑。 Erlang程序是一套相互溝通的過程。因此,您可以將通信過程切換到「暫停」模式,並且不會處理輸入消息。你可以通過自定義進程(erlang進程)來完成。如果您不需要丟失傳入的消息,您可以將其存儲在任何隊列中並在恢復後進行處理。 – W55tKQbuRu28Q4xv

回答

0

我認爲我的問題的簡短答案是'不'。

您可以向所有進程發送暫停消息。然而,很難知道進程何時停止,如果使用了很多進程,可能會有相當大的時間延遲。最後,我確實使用了pssuspend做到這一點:

在二郎:

runmyscript() -> 
    receive 
     updatemodel-> 
      os:cmd("start myscript.bat"), 
... 
end. 

在myscript.bat

pssuspend werl.exe 
mycommands 
... 
pssuspend -r werl.exe 
exit 
0

由於W55tKQbuRu28Q4xv表示可以「暫停」過程。

要執行該操作並且不會丟失在暫停過程中發送到您的進程的所有消息,請選擇性接收。假設你的過程是一個gen_server它可以是這樣的:

handle_info(pause, State) -> 
    receive 
     unpause -> 
      {noreply, State} 
    end; 

注意,所有的消息都會在那裏,在收到您的進程隊列。因此,如果您正在以取決於系統時鐘值的方式處理消息,則需要將時間採樣移至發件人進程。