2013-02-28 104 views
0

我有一個主窗體GUI,它產生的子GUI都是模塊化的,獨立於產生它的主模塊,只接受輸入參數,但沒有輸出參數或數據依賴性,因爲它們執行獨立的非相關任務。使用Matlab GUI進行並行處理

當前的設置是通過按下主GUI上的按鈕,創建子GUI,並執行計算時間較長的算法,並且將繼續,直到完成,然後GUI將被銷燬。

問題是我希望能夠從主GUI中打開多個不同的模塊,而一個孩子已經存在。例如,按下按鈕運行GUI 1,返回到主GUI並按另一個按鈕運行GUI 2,依此類推。我遇到的問題是,GUI 1然後被中斷並保留,直到GUI 2完成執行,然後GUI 1從其停止的位置返回,因爲我希望它們都同時運行。

編輯︰我解決了我的問題,原來有一個醜陋的方式來做到這一點,即使這樣,它不會彈出的GUI,但做我需要它做。只需要將迭代中的parfor用作索引號來告訴matlab哪個函數在循環中運行。

+0

您是否嘗試按照我的建議添加暫停呼叫?這應該允許出現額外的窗口 – grantnz 2013-03-06 15:53:53

回答

0

您可以使用暫停命令來執行基本的並行處理以產生執行,但這有點侵入性,因爲您的長算法需要定期調用暫停。

function [ output_args ] = BackgroundTask(srcTimer,~, hObject) 
%BackgroundTask - Test background task 

fprintf(1,'Background\n'); 

end 


hObject = 'Some relevant Object'; 
feedbackTimer = timer('Period',1,'TimerFcn', {@BackgroundTask, hObject}, 'ExecutionMode','FixedRate'); 
start(feedbackTimer); 

長期運行的任務

fprintf(1,'Start\n'); 
for i=1:200000; factorial(100); 
     if mod(i,1000) == 0 
      pause(0.001); 
     end 
end 
fprintf(1,'Finish\n'); 

如果啓動後臺任務,然後運行長時間運行的代碼,你應該看到:

Background 
Background 
Start 
Background 
Background 
Background 
Background 
Background 
Finish 
Background 
Background 

這也可能是值得探討了Matlab Parallel Computing Toolbox