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
强制图形更新,所以它会稍微减慢你的计算速度。
我有一个数组。我正在函数内的 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
强制图形更新,所以它会稍微减慢你的计算速度。