使用Matlab GUI进行并行处理

时间:2013-02-28 17:47:15

标签: matlab user-interface parallel-processing matlab-guide

我有一个主窗体GUI,它生成子GUI,它们都是模块化的,独立于生成它的master,只接受输入参数,但没有输出参数或数据依赖,因为它们执行单独的非相关任务。

当前设置是通过按下主GUI上的按钮,制作子GUI并执行计算长的算法并继续直到完成,然后销毁GUI。

问题是我希望能够在孩子已经存在的情况下从主GUI打开多个不同的模块。例如,按下按钮以运行GUI 1,返回主GUI并按下另一个按钮以运行GUI 2,依此类推。我遇到的问题是GUI 1被中断并保持到GUI 2完成执行,然后GUI 1从它停止的地方返回,我希望它们同时运行。

编辑:我解决了我的问题,原来有一种丑陋的方法可以做到这一点,即便如此,它也不会弹出GUI,而是做我需要做的事情。只需使用parfor作为索引号的迭代来告诉matlab在循环内运行哪个函数。

1 个答案:

答案 0 :(得分:0)

您可以使用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 Parallel Computing Toolbox