Иногда моя программа работает слишком долго, поэтому я хотел бы узнать, может ли пользователь остановить программу из графического интерфейса, когда захочет. Я пробовал, но пока у программы есть одна функция, она не читает другую (например, одна функция, которую пользователь скажет, чтобы она остановилась).
спросил(а) 2014-12-04T12:02:00+03:00 8 лет, 6 месяцев назад
добавить комментарий
пожаловаться
Если вы действительно хотите что-то вроде кнопки » stop , единственным вариантом является выполнение проверки вашего долговременного процесса, который часто спрашивает, следует ли останавливаться или нет. Крошечный пример счетчика:
Просто сохраните его на teststop.m и запустите. Обратите внимание, что pause(0.001) требуется в любом случае, чтобы прерывание обратного вызова было прервано. Вышеуказанное не будет работать без вызова паузы. Конечно, задержка на остановке требует времени, поэтому я предлагаю сделать чек не слишком частым. В качестве альтернативы, если вы обрабатываете что-то периодическое, например, ждать ввода или что-то еще, вы можете реализовать его с помощью timer , который можно легко остановить.
MATLAB Break and Continue
Источник: progi.pro
Как остановить выполнение в графическом интерфейсе в MatLab
Иногда моя программа выполняется слишком долго, поэтому я хотел бы знать, может ли пользователь остановить программу из графического интерфейса, когда он захочет.
Я пробовал, но пока программа выполняет одну функцию, она не читает другую (например, одну функцию, которую пользователь сказал бы, чтобы она остановилась).
Eng 4 Дек 2014 в 12:02
2 ответа
Лучший ответ
Если вам действительно нужно что-то вроде кнопки stop , единственный вариант — реализовать проверку в вашем длительном процессе, которая часто спрашивает, следует ли ему останавливаться или нет.
Пример крошечного счетчика:
Просто сохраните его в teststop.m и бегите. Обратите внимание, что pause(0.001) требуется в любом случае, чтобы разрешить прерывание обратного вызова. Вышеупомянутое не будет работать без вызова паузы.
Проверка, конечно, требует времени, поэтому я бы посоветовал проводить проверку не слишком часто.
В качестве альтернативы, если вы обрабатываете что-то периодическое, например, ожидание ввода или что-то еще, вы можете реализовать это с помощью timer , который можно легко остановить.
sebastian 4 Дек 2014 в 12:42
Команда остановки запуска в Matlab — это ctrl + c или ctrl + break, но если ваша программа вызывает сбой Matlab, она может не принимать эти команды, и вам придется принудительно закрыть программу. во время запуска программы попробуйте ctrl + c в командном окне, это должно остановить выполнение.
Хммм . графический интерфейс занимает слишком много времени? Вы можете попробовать добавить перерывы между кодом, чтобы определить, что замедляет процесс. Добавьте тик в начале и тик в том месте, где вы хотите рассчитать время процесса.
How to use MATLAB Online for free without license key or activation key ?
Источник: question-it.com
Как остановить работающий скрипт в Matlab
Кажется, работает вечно. Потому что я нажимаю F5 в окне редактора. Поэтому я не могу нажать C-Break для остановки в консоли Matlab.
Я просто хочу знать, как остановить сценарий. В настоящее время я использую диспетчер задач, чтобы убить Matlab, что действительно глупо.
user183828 25 янв ’11 в 08:01 2011-01-25 08:01
2011-01-25 08:01
8 ответов
Справка Matlab говорит об этом: для M-файлов, которые выполняются длительное время или которые вызывают встроенные модули или MEX-файлы, которые выполняются длительное время, Ctrl+C не всегда эффективно останавливает выполнение. Как правило, это происходит на платформах Microsoft Windows, а не на платформах UNIX[1]. Если у вас возникла эта проблема, вы можете помочь MATLAB прервать выполнение, включив функцию drawnow, pause или getframe в ваш M-файл, например, в большой цикл. Обратите внимание, что Ctrl + C может быть менее отзывчивым, если вы запустили MATLAB с параметром -nodesktop.
Поэтому я не думаю, что какой-либо вариант существует. Это происходит со многими сложными функциями matlab. Либо мы должны ждать, либо не использовать их!
user581271 25 янв ’11 в 11:51 2011-01-25 11:51
2011-01-25 11:51
Если Ctrl+ C не отвечает сразу, потому что ваш скрипт слишком длинный / сложный, удерживайте его.
Команда break не запускается, когда matlab выполняет некоторые из своих более глубоких сценариев, и либо не регистрирует последовательность ctrl в буфере, либо очищает буфер непосредственно перед или сразу после завершения этих фрагментов кода. В любом случае, когда Matlab вернется, чтобы выполнить больше вашего скрипта, он распознает, что вы держите Ctrl+ C, и завершите работу.
Для программ, которые работают дольше, я обычно стараюсь найти подходящее место для обновления статуса, и я всегда сопровождаю это определенным количеством времени, используя tic и toc. В зависимости от того, что я делаю, я могу использовать время выполнения, время сегмента, какое-то среднее значение и т. Д.
но, похоже, у них тоже есть для этого новые функции.
user2539905 01 июл ’13 в 17:27 2013-07-01 17:27
2013-07-01 17:27
MATLAB не отвечает на Ctrl-C при выполнении функции, реализованной в mex, такой как svd. Также, когда MATLAB выделяет большой кусок памяти, он не отвечает. Хорошей практикой является всегда запускать ваши функции для небольшого объема данных, а когда все тесты проходят, запускать их для фактического масштаба. Когда время является проблемой, вы должны проанализировать, сколько времени работает каждый сегмент кода, а также их грубую временную сложность.
user427252 25 янв ’11 в 16:33 2011-01-25 16:33
2011-01-25 16:33
Подумайте о проведении нескольких сессий Matlab. Оставьте главное окно сеанса (красивое со всеми цветами, файловым менеджером, историей команд, рабочим пространством, редактором и т. Д.) Для запуска того, что, как вы знаете, прекратится.
Вещи, с которыми вы экспериментируете, скажем, вы возитесь с ode suite и получаете много предупреждений: матрица единственного числа, потому что вы изменили какой-то параметр и не предвидели, что произойдет, запустится в отдельном сеансе:
dos(‘matlab -automation -r Alt» и «F4» на клавиатуре.)
В качестве альтернативы, как упоминалось в других ответах,
также должен работать, но не будет выходить из редактора.
user3680301 27 май ’14 в 14:47 2014-05-27 14:47
2014-05-27 14:47
Одно решение, которое я принял, — для использования с Java-кодом, но концепция с mexFunctions такая же, только более сложная, — вернуть FutureValue и затем выполнить цикл, пока FutureValue.finished() или что-либо еще возвращает true. Фактический код выполняется в другом потоке / процессе. Завершение попытки, поймать это, и FutureValue.cancel() в блоке catch работает для меня.
В случае с mex-функциями вам нужно будет вернуть некоторый указатель (как int), который указывает на структуру / объект, содержащий все необходимые данные (собственный обработчик потока, bool для завершения и т. Д.). В случае встроенной функции mexFunction вашей mexFunction, скорее всего, потребуется вызвать эту функцию mexFunction в отдельном потоке. Mex-функции — это всего лишь библиотеки DLL / общие объекты.
FV = mexLongProcessInAnotherThread(); try while ~mexIsDone(FV); java.lang.Thread.sleep(100); %pause has a memory leak drawnow; %allow stdout/err from mex to display in command window end catch mexCancel(FV); end
Источник: stackru.com