Matlab停止函数的执行

Matlab stop function's execution

我有一个数组。我正在函数内的 for 循环中处理此数组的元素。

function results = processArray(array)
   for ii = 1:length(array)
      %some stuff here
      results(ii) = %getting the results for this particular element
   end
end

可能有很多元素,计算可能会花费很多时间。我希望能够在用户想要执行的任意时间完成 for 循环的执行,以便已经处理的元素的结果可用。

我试图制作一个带有按钮的图形,该按钮会更改布尔标志。在 for 循环中,我正在检查该布尔值的值。如果布尔值发生变化,则 for 循环应该中断。

function results = processArray(array)
   fig = figure;
   fig.UserData.continue = 1;
   uicontrol('Parent', fig', 'Style', 'pushbutton', 'String', 'stop', 'callback', @interrupt)

   for ii = 1:length(array)
      if(fig.UserData.continue == 0)
         break;
      end
      %some stuff here
      results(ii) = %getting the results for this particular element
   end
end

function interrupt(obj, ~)
   fig = obj.Parent;
   fig.UserData.continue = 0;
end

好吧,那行不通。该图仅在所有计算完成后显示。如果我先使用 waitforbuttonpress 之类的方法绘制图形,然后继续执行 for 循环,按下按钮不会停止执行。我认为只有在 for 循环完成后才会执行回调函数。有什么办法可以解决吗?

您需要 drawnow 创建按钮后,它才会显示。您还需要在循环内 drawnow 来更新按钮状态。那么你应该实现你想要的。

drawnow强制图形更新,所以它会稍微减慢你的计算速度。