Как остановить действие с помощью кнопки в scilab - PullRequest
1 голос
/ 08 июня 2019

Я хочу иметь возможность остановить функцию, запускаемую кнопкой, нажатием другой кнопки.Точнее, я хочу остановить цикл while, изменив параметр:

stop=%F
while ... & stop<>%T
    ...
end

Я попытался написать функцию обратного вызова, которая изменяет переменную для остановки while:

function callback(handles)
    stop=%T
end

, нодействие не запускается до конца предыдущего.

Я думаю, что-то должно быть связано с некоторыми потоками, но у меня нет этих знаний в scilab.

1 Ответ

0 голосов
/ 11 июня 2019

У вас есть два решения. Первый с обратным вызовом с приоритетом выражения:

b = uicontrol("style","pushbutton","callback","stop=%t","callback_type",10);
stop = %f;
while ~stop
    sleep(1)
end

второй с приоритетным обратным вызовом функции:

function fun()
    stop = %t;
    stop = resume(stop);
end

b = uicontrol("style","pushbutton","callback","fun","callback_type",12);
stop = %f;
while ~stop
    sleep(1)
end

Во втором случае вы должны использовать resume, чтобы вернуть локальную переменную stop в основное рабочее пространство. Приоритетный обратный вызов - обязательное условие для прерывания циклов ожидания.

...