2013-05-20 4 views
5

同僚は、インタラクティブコードを含むMATLAB startup.mファイルを持っています(コマンドquestdlgを呼び出して作業したいプロジェクトディレクトリを尋ねます)。MATLAB startup.mがワーカーで実行されているかどうかを検出します。

これは、MATLABを直接実行しているときにうまく動作します。しかし、彼はまた、matlabpoolを起動して、MATLABコードを並列に実行する必要があります。起動時

matlabpoolの労働者は(無限に、またはCtrlキーCまで)、彼のstartup.mファイルを実行しているquestdlgになった後、ハングしています。

簡単な解決策は、実際には必須ではないので、彼のstartup.mから対話型コードを取り除くことです。

しかし、このstartup.mが起動しているワーカー(isdeployedまたは​​)に似ているかどうかを検出する方法はありますか?その後、彼は役に立つと感じるインタラクティブなコードを保つことができますが、ワーカーを起動しないときにのみ実行します。

コマンドgetCurrentWorkerは、必要なもののように思えましたが、起動時ではなくタスクの実行中にのみ動作すると考えられます。

答えて

2

-nodesktopモードを頻繁に使用しないかぎり、usejava関数を使用して対話型デスクトップが実行されているかどうかを確認できます。

if usejava('desktop') 
    questdlg(...); 
end 
+0

ありがとう@エドリック。個人的には、それが「正しい」方法であれば、文書化されていないものがあれば問題ありませんが、基本的な作業はここでもうまくいくと書かれています。 'usejava'のような音がうまくいきます - ありがとう! –

0

labindexを見てください。それには、labSendlabReceiveがありません。

+0

たものが設定(またはしない)されているとして残念ながら、これはあなたに何を教えてくれませんずっと後より'startup.m' – Edric

+0

@JoshuaBarr申し訳ありませんが、私は' labindex'も試してみたはずですが、これは@エドリックが言及している理由では動作しません。 @エドリック、何か提案はありますか? –

+0

@SamRoberts - はい、方法があります。私は確信しています。それはあなたが行かないことをどのように文書化されていないかの問題です。私は助けてくれる答えを投稿します。 – Edric

0

は、少なくとも私のR2014bのために、

isempty(getCurrentWorker) 

は仕事をしているように見える:

>> getCurrentWorker 
ans = 
    [] 
>> parfor i=1:2;disp(getCurrentWorker);end 
Worker 
       Host: IMP.OIMRDS 
     ComputerType: WIN64 

      ProcessId: 15784 
Worker 
       Host: IMP.OIMRDS 
     ComputerType: WIN64 

      ProcessId: 17220 
関連する問題