0

私は、すべてモジュラーで、それを生成したマスターから独立した子 GUI を生成するメイン フォーム GUI を持っています。

現在のセットアップでは、マスター GUI のプッシュボタンを押すと、子 GUI が作成され、計算に時間がかかるアルゴリズムが実行され、終了するまで続行されます。その後、GUI は破棄されます。

問題は、子が既に存在している間に、マスター GUI から複数の異なるモジュールを開く機能が欲しいことです。たとえば、プッシュボタンを押して GUI 1 を実行し、マスター GUI に戻って別のボタンを押して GUI 2 を実行する、などです。私が遭遇する問題は、GUI 1 が中断され、GUI 2 の実行が終了するまで保留され、GUI 1 が中断したところから戻って、両方を同時に実行したかったことです。

編集:私は問題を解決しましたが、これを行うには醜い方法があることがわかりました.それでも、GUIはポップアップしませんが、必要なことは行います. ループ内で実行する関数を matlab に指示するために、インデックス番号として機能する反復で parfor を使用する必要があります。

4

1 に答える 1

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も調べる価値があるかもしれません。

于 2013-02-28T20:00:15.047 に答える