中断执行回调
MATLAB®让你控制一个回调函数是否可以中断时执行。例如,您可以允许用户停止动画循环通过创建一个回调,打断了动画。在其他时候,你可能想要防止潜在的干扰,当运行回调的顺序是很重要的。例如,您可能防止中断了WindowButtonMotionFcn
调显示一个图像的不同部分。
如何控制中断
回调函数执行根据他们的订单在一个队列。如果回调执行和用户操作触发第二次回调,第二回调试图打断第一个回调。第一个回调跑回调。第二回调打断回调。
两个属性值控制的响应中断的尝试:
的
可中断
对象的属性拥有运行调决定是否允许中断。的值“上”
允许中断。的值“关闭”
不允许中断。默认值是“上”
。如果中断是不允许的,那么
BusyAction
对象拥有的属性(打断回调)决定如果MATLAB利用或丢弃打断的回调。的值“队列”
允许中断运行后回调执行回调结束执行。的值“取消”
丢弃打断的回调。默认值是“队列”
。
中断时执行的回调行为是被允许的
当一个对象的可中断
属性设置为“上”
在下次发生,其回调可中断的这些命令之一:drawnow
,图
,getframe
,等待
,或暂停
。
如果运行调包含其中的一个命令,然后用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),……“弦”、“等(可中断)”,…“TooltipString”、“可中断=“…“可中断”,“对”,…“回调”,@wait_interruptible);
这是创建的命令等待(不间断)按钮。请注意,可中断
属性设置为“关闭”
。
h_nointerrupt = uicontrol (h_panel1,“风格”,“按钮”,…“位置”,(40120,30),……“弦”、“等(不间断)”,…“TooltipString”、“可中断=”,…“可中断”,“关闭”,…“回调”,@wait_uninterruptible);
这是创建的命令冲浪情节(队列)按钮。请注意,BusyAction
属性设置为“队列”
。
hsurf_queue = uicontrol (h_panel2,“风格”,“按钮”,…“位置”,(30200110,30),……“弦”、“冲浪情节(队列),…“BusyAction”、“队列”,…“TooltipString”、“BusyAction =队列”,…“回调”,@surf_queue);
这是创建的命令网格图(取消)按钮。请注意,BusyAction
属性设置为“取消”
。
hmesh_cancel = uicontrol (h_panel2,“风格”,“按钮”,…“位置”,(30130110,30),……“弦”、“网图(取消),…“BusyAction”、“取消”,…“TooltipString”、“BusyAction =取消',…“回调”,@mesh_cancel);