2013-05-20 35 views
5

一位同事有一個包含交互式代碼的MATLAB startup.m文件(它調用命令questdlg詢問他希望工作在哪個項目目錄下)。檢測MATLAB startup.m是否在工作人員上運行

直接運行MATLAB時,這對他很好。但是,他還需要並行運行MATLAB代碼,並啓動了一個matlabpool

啓動時,在matlabpool工人正在運行他的startup.m文件,得到的questdlg再掛(無限,或直到按CtrlÇ)。

一個簡單的解決方案就是擺脫他的startup.m中的交互式代碼,因爲它不是真正必需的。

但是有沒有辦法來檢測這個startup.m是否由一個工人啓動 - 類似於isdeployed或​​?然後他可以保留他認爲有用的交互式代碼,但只有在不啓動工作人員時才執行它。

命令getCurrentWorker看起來可能是需要的,但我相信它只在執行任務期間起作用,而不是在啓動時起作用。

回答

2

您可以使用usejava函數來查看交互式桌面是否在運行,除非您經常使用-nodesktop模式,否則這可能是一個足夠好的近似值。

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

謝謝@Edric。就我個人而言,如果它是「正確」的做法,我會對沒有記錄的東西感到滿意 - 但這裏記錄的基本上可行的東西也不錯。聽起來像'usejava'會起作用 - 謝謝! –

0

看一看labindex,如果不符合,請撥打labSendlabReceive

+0

不幸的是這會告訴你什麼是那些正在建立(或沒有)晚得多'startup.m' – Edric

+0

@JoshuaBarr對不起,我應該提到我也嘗試過'labindex',因爲@Edric提到的原因不起作用。 @Edric,你有什麼建議嗎? –

+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 
相關問題