Main Content

Interrumpir ejecución de devolución de llamada

le permite controlar si una función de devolución de llamada se puede interrumpir mientras se está ejecutando.MATLAB® Por ejemplo, puede permitir a los usuarios detener un bucle de animación mediante la creación de una devolución de llamada que interrumpe la animación. En otras ocasiones, es posible que desee evitar posibles interrupciones, cuando el orden de la devolución de llamada en ejecución es importante. Por ejemplo, puede evitar interrupciones para una devolución de llamada que muestra diferentes secciones de una imagen.WindowButtonMotionFcn

Cómo controlar la interrupción

Las funciones de devolución de llamada se ejecutan según su orden en una cola. Si se está ejecutando una devolución de llamada y una acción del usuario desencadena una segunda devolución de llamada, la segunda devolución de llamada intenta interrumpir la primera devolución de llamada. La primera devolución de llamada es la.ejecución de devolución de llamada La segunda devolución de llamada es la.interrupción de devolución de llamada

Dos valores de propiedad controlan la respuesta a un intento de interrupción:

  • La propiedad del objeto que posee la devolución de llamada en ejecución determina si se permite la interrupción.Interruptible Un valor de permite la interrupción.'on' Un valor de no permite la interrupción.'off' El valor predeterminado es.'on'

  • Si no se permite la interrupción, la propiedad (del objeto que posee la devolución de llamada de interrupción) determina si se pone en cola o descarta la devolución de llamada de interrupción.BusyActionMATLAB Un valor de permite que la devolución de llamada de interrupción se ejecute después de que la devolución de llamada en ejecución finalice.'queue' Un valor de descarta la devolución de llamada de interrupción.'cancel' El valor predeterminado es.'queue'

Comportamiento de devolución de llamada cuando se permite la interrupción

Cuando se establece la propiedad de un objeto, su devolución de llamada se puede interrumpir en la siguiente aparición de uno de estos comandos:,,,,, o.Interruptible'on'drawnowfiguregetframewaitforpausewaitbar

  • Si la devolución de llamada en ejecución contiene uno de estos comandos, detiene la ejecución de la devolución de llamada en ejecución y ejecuta la devolución de llamada de interrupción. reanuda la ejecución de la devolución de llamada cuando finaliza la devolución de llamada de interrupción.MATLABMATLAB

  • Si la devolución de llamada en ejecución no contiene uno de estos comandos, finaliza la ejecución de la devolución de llamada sin interrupciones.MATLAB

Para obtener más detalles sobre la propiedad interrumpible y sus efectos, vea la descripción de la propiedad en la página.InterruptibleUIControl Properties

Ejemplo

En este ejemplo se muestra cómo controlar la interrupción de devolución de llamada mediante las propiedades y una barra de espera.InterruptibleBusyAction

Copie el archivo de origen

  1. En, establezca la carpeta actual en una en la que tenga acceso de escritura.MATLAB

  2. Ejecute este comando:MATLAB
    copyfile(fullfile(docroot, 'techdoc','creating_guis','examples',...
    'callback_interrupt.m')),fileattrib('callback_interrupt.m', '+w');

Ejecute el código de ejemplo

Ejecute el comando,.callback_interrupt El programa muestra dos ventanas.

Al hacer clic en pares específicos de botones se muestra el efecto de diferentes combinaciones de valores de propiedad:

  • — Haga clic inmediatamente seguido por cualquier botón en la segunda ventana: o.Callback interruptionWait (interruptible)Surf Plot (queue)Mesh Plot (cancel) La barra de espera se muestra, pero se interrumpe momentáneamente por la operación de trazado.

  • — Haga clic inmediatamente seguido de.Callback queueing Wait (uninterruptible)Surf Plot (queue) La barra de espera se ejecuta hasta completarse. A continuación, se muestra la gráfica de superficie.

  • — Haga clic inmediatamente seguido de.Callback cancellationWait (uninterruptible)Mesh Plot (cancel) La barra de espera se ejecuta hasta completarse. No se muestra ningún trazado porque descarta la devolución de llamada de trazado de malla.MATLAB

Examine el código fuente

Las propiedades y se pasan como argumentos de entrada a la función cuando se crea cada botón.InterruptibleBusyActionuicontrol

Aquí está el comando que crea el botón pulsador.Wait (interruptible) Observe que la propiedad está establecida en.Interruptible'on'

h_interrupt = uicontrol(h_panel1,'Style','pushbutton',...                         'Position',[30,110,120,30],...                         'String','Wait (interruptible)',...                         'Tooltip','Interruptible = on',...                         'Interruptible','on',...                         'Callback',@wait_interruptible); 

Aquí está el comando que crea el botón pulsador.Wait (uninterruptible) Observe que la propiedad está establecida en.Interruptible'off'

h_nointerrupt = uicontrol(h_panel1,'Style','pushbutton',...                         'Position',[30,40,120,30],...                         'String','Wait (uninterruptible)',...                         'Tooltip','Interruptible = off',...                         'Interruptible','off',...                         'Callback',@wait_uninterruptible);

Aquí está el comando que crea el botón pulsador.Surf Plot (queue) Observe que la propiedad está establecida en.BusyAction'queue'

hsurf_queue = uicontrol(h_panel2,'Style','pushbutton',...                         'Position',[30,200,110,30],...                         'String','Surf Plot (queue)',...                         'BusyAction','queue',...                         'Tooltip','BusyAction = queue',...                         'Callback',@surf_queue);

Aquí está el comando que crea el botón pulsador.Mesh Plot (cancel) Observe que la propiedad está establecida en.BusyAction'cancel'

hmesh_cancel = uicontrol(h_panel2,'Style','pushbutton',...                         'Position',[30,130,110,30],...                         'String','Mesh Plot (cancel)',...                         'BusyAction','cancel',...                         'Tooltip','BusyAction = cancel',...                         'Callback',@mesh_cancel);

Consulte también

| | |

Temas relacionados