主要内容

中断执行回调

MATLAB®让您控制回调函数在执行时是否可以被中断。例如,您可以允许用户通过创建一个中断动画的回调来停止动画循环。在其他时候,当运行回调的顺序很重要时,您可能希望防止潜在的中断。例如,您可以防止对WindowButtonMotionFcn显示图像的不同部分的回调。

如何控制中断

回调函数根据它们在队列中的顺序执行。如果一个回调正在执行,并且用户操作触发了第二个回调,第二个回调将尝试中断第一个回调。第一个回调是跑回调.第二个回调是打断回调

两个属性值控制对中断尝试的响应:

  • 可中断属性决定是否允许中断。的值“上”允许中断。的值“关闭”不允许中断。默认值为“上”

  • 如果不允许中断,那么BusyAction属性(拥有中断回调的对象)确定MATLAB是否排队或丢弃中断回调。的值“队列”允许中断回调在正在运行的回调执行完毕后执行。的值“取消”丢弃中断回调。默认值为“队列”

允许中断时的回叫行为

当一个对象的可中断属性设置为“上”,它的回调可以在下次出现以下命令之一时被中断:drawnow数字getframe等待暂停,或waitbar

  • 如果正在运行的回调包含这些命令中的一个,那么MATLAB将停止正在运行的回调的执行,并执行中断回调。当中断回调完成时,MATLAB继续执行正在运行的回调。

  • 如果运行的回调不包含这些命令中的一个,那么MATLAB将在不中断的情况下执行回调。

有关可中断属性及其效果的详细信息,请参见可中断物业描述UIControl属性页面。

例子

控件控制回调中断可中断BusyAction属性和等待栏。

复制源文件

  1. 在MATLAB中,将当前文件夹设置为具有写访问权限的文件夹。

  2. 执行这个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);

另请参阅

|||

相关的话题