Matlab - Cancelar una funcion

 
Vista:

Cancelar una funcion

Publicado por Isa (1 intervención) el 19/11/2004 16:04:47
Hola!! estoy usando la waitbar de matlab con un botón de cancelar y cuando cancelo querría parar la ejecución de una función. ¿Alguien sabe como puedo hacer esto? ¿hay alguna forma de capturar que se le ha dado a ese botón para que la función pare de ejecutarse, se cancele?
La función no se vuelve a ejecutar después de darle al botón.
Muchas gracias .
Isa
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Detener ejecución con waitbar y botón de cancelar

Publicado por Alejandro (145 intervenciones) el 06/10/2023 16:23:11
¡Hola Isa! Entiendo, puedes lograr esto utilizando la función `waitbar` en combinación con el uso de un objeto `uifigure` y un botón de cancelar. Aquí hay un ejemplo básico:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function myFunction()
 
    % Crear una figura con una barra de espera y un botón de cancelar
    fig = uifigure('Name', 'Progreso', 'Position', [100, 100, 250, 100]);
    waitbarHandle = waitbar(0, 'Procesando...', 'Cancelable', 'on', 'CreateCancelBtn', @(src, event) cancelCallback(fig));
 
    % Iniciar tu función principal
    try
        for i = 1:100
            % Realizar operaciones
            pause(0.1);
 
            % Actualizar la barra de espera
            waitbar(i/100, waitbarHandle);
 
            % Verificar si se ha pulsado el botón de cancelar
            if isgraphics(fig, 'figure') && getappdata(waitbarHandle, 'Canceling')
                disp('Operación cancelada por el usuario.');
                break;
            end
        end
 
        % Limpiar y cerrar la figura al finalizar
        delete(waitbarHandle);
        close(fig);
 
    catch ME
        % Manejar excepciones aquí
        delete(waitbarHandle);
        close(fig);
        rethrow(ME);
    end
end
 
function cancelCallback(fig)
    % Establecer la propiedad 'Canceling' en true
    waitbarHandle = findall(fig, 'Tag', 'TMWWaitbar');
    setappdata(waitbarHandle, 'Canceling', true);
end

Este ejemplo utiliza una figura `uifigure` con una barra de espera (`waitbar`) y un botón de cancelar. La función principal (`myFunction`) realiza algún trabajo en un bucle y actualiza la barra de espera. Si se pulsa el botón de cancelar, se establece una bandera (`Canceling`) que se verifica en el bucle para detener la ejecución.

Espero que esto sea útil para tu caso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar