我有一个主窗体GUI,它生成子GUI,它们都是模块化的,独立于生成它的master,只接受输入参数,但没有输出参数或数据依赖,因为它们执行单独的非相关任务。
当前设置是通过按下主GUI上的按钮,制作子GUI并执行计算长的算法并继续直到完成,然后销毁GUI。
问题是我希望能够在孩子已经存在的情况下从主GUI打开多个不同的模块。例如,按下按钮以运行GUI 1,返回主GUI并按下另一个按钮以运行GUI 2,依此类推。我遇到的问题是GUI 1被中断并保持到GUI 2完成执行,然后GUI 1从它停止的地方返回,我希望它们同时运行。
编辑:我解决了我的问题,原来有一种丑陋的方法可以做到这一点,即便如此,它也不会弹出GUI,而是做我需要做的事情。只需使用parfor作为索引号的迭代来告诉matlab在循环内运行哪个函数。答案 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。