MATLAB®让您控制回调函数在执行时是否可以被中断。例如,您可以允许用户通过创建一个中断动画的回调来停止动画循环。在其他时候,当运行回调的顺序很重要时,您可能希望防止潜在的中断。例如,您可以防止对WindowButtonMotionFcn
显示图像的不同部分的回调。
回调函数根据它们在队列中的顺序执行。如果一个回调正在执行,并且用户操作触发了第二个回调,第二个回调将尝试中断第一个回调。第一个回调是跑回调.第二个回调是打断回调.
两个属性值控制对中断尝试的响应:
的可中断
属性决定是否允许中断。的值“上”
允许中断。的值“关闭”
不允许中断。默认值为“上”
.
如果不允许中断,那么BusyAction
属性(拥有中断回调的对象)确定MATLAB是否排队或丢弃中断回调。的值“队列”
允许中断回调在正在运行的回调执行完毕后执行。的值“取消”
丢弃中断回调。默认值为“队列”
.
当一个对象的可中断
属性设置为“上”
,它的回调可以在下次出现以下命令之一时被中断:drawnow
,数字
,getframe
,等待
,暂停
,或waitbar
.
如果正在运行的回调包含这些命令中的一个,那么MATLAB将停止正在运行的回调的执行,并执行中断回调。当中断回调完成时,MATLAB继续执行正在运行的回调。
如果运行的回调不包含这些命令中的一个,那么MATLAB将在不中断的情况下执行回调。
有关可中断属性及其效果的详细信息,请参见可中断
物业描述UIControl属性页面。
控件控制回调中断可中断
和BusyAction
属性和等待栏。
在MATLAB中,将当前文件夹设置为具有写访问权限的文件夹。
执行这个MATLAB命令:拷贝文件(fullfile (docroot,‘techdoc’,‘creating_guis’,“例子”,…
“callback_interrupt.m”)),fileattrib (callback_interrupt。m ', ' + w ');
执行命令,callback_interrupt
.该程序显示两个窗口。
点击特定的按钮对可以看到不同属性值组合的效果:
回调中断——点击等待(可中断)紧接着第二个窗口中的任一按钮:冲浪情节(队列)或网格图(取消).等待栏会显示出来,但会被绘图操作暂时中断。
回调排队——点击等待(不间断)立即紧随其后冲浪情节(队列).等待条运行到完成。然后显示表面图。
取消回调——点击等待(不间断)立即紧随其后网格图(取消).等待条运行到完成。没有图形显示,因为MATLAB放弃网格图形回调。
的可中断
和BusyAction
属性作为输入参数传递给uicontrol
在创建每个按钮时调用。
下面是创建等待(可中断)按钮。请注意,可中断
属性设置为“上”
.
h_interrupt = uicontrol (h_panel1,“风格”,“按钮”,…“位置”,(30110120,30),……“弦”、“等(可中断)”,…“提示”、“可中断=“…“可中断”,“对”,…“回调”,@wait_interruptible);
下面是创建等待(不间断)按钮。请注意,可中断
属性设置为“关闭”
.
h_nointerrupt = uicontrol (h_panel1,“风格”,“按钮”,…“位置”,(40120,30),……“弦”、“等(不间断)”,…“提示”、“可中断=”,…“可中断”,“关闭”,…“回调”,@wait_uninterruptible);
下面是创建冲浪情节(队列)按钮。请注意,BusyAction
属性设置为“队列”
.
hsurf_queue = uicontrol (h_panel2,“风格”,“按钮”,…“位置”,(30200110,30),……“弦”、“冲浪情节(队列),…“BusyAction”、“队列”,…“提示”、“BusyAction =队列”,…“回调”,@surf_queue);
下面是创建网格图(取消)按钮。请注意,BusyAction
属性设置为“取消”
.
hmesh_cancel = uicontrol (h_panel2,“风格”,“按钮”,…“位置”,(30130110,30),……“弦”、“网图(取消),…“BusyAction”、“取消”,…“提示”、“BusyAction =取消',…“回调”,@mesh_cancel);