簡體   English   中英

Matlab GUI的並行處理

[英]Parallel Processing with Matlab GUI's

我有一個主窗體GUI,它生成所有子GUI,這些子GUI都是模塊化的,並且與生成它的主GUI無關,僅接受輸入參數,而沒有輸出參數或數據依賴性,因為它們執行了獨立的無關任務。

當前的設置是,通過按下主GUI上的按鈕,將創建一個子GUI並執行計算時間長的算法,並將繼續運行直到完成,然后銷毀該GUI。

問題是我希望能夠在已有孩子的情況下從主GUI打開多個不同的模塊。 例如,按一個按鈕以運行GUI 1,返回主GUI,然后按另一個按鈕以運行GUI 2,依此類推。 我遇到的問題是,然后GUI 1被中斷並保持等待狀態,直到GUI 2完成執行,然后GUI 1從中斷的位置返回,因為我希望它們同時運行。

編輯:我解決了我的問題,結果是有一個丑陋的方法來執行此操作,即使這樣,它也不會彈出GUI,但是會執行我需要的操作。 只需使用parfor,將迭代作為索引號即可告訴matlab在循環中運行哪個函數。

您可以通過使用pause命令執行基本的並行處理,以產生執行力,但這有點麻煩,因為您的長算法需要定期調用pause。

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 並行計算工具箱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM