0

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

当前的设置是,通过按下主 GUI 上的按钮,创建一个子 GUI,并执行一个计算时间长的算法,并将一直持续到完成,然后 GUI 被销毁。

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

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

4

1 回答 1

0

您可以使用 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并行计算工具箱

于 2013-02-28T20:00:15.047 回答