我的问题是,如何通过按下GUI按钮来停止脚本?我已经尝试编写一个模拟“CTRL + C”按下的代码,但它不起作用。
答案 0 :(得分:1)
我不确定是否有办法阻止调用另一个脚本。另一种方法是设置一个全局变量,该变量由您希望停止的脚本定期检查。如果在回调中将“停止处理”变量的值设置为true,则另一个脚本可能会在发现它应该停止时停止。
修改强>
如果您希望有一个GUI选项来停止正在进行的过程,我建议您在MATLAB文件交换中查看STOPLOOP之类的内容。
答案 1 :(得分:1)
我不会为你编写代码,但这是完成此任务的高级方法:
显示带有按钮的waitbar
。为按钮创建一个回调函数,将标志设置为true。
在for循环中开始计算。在循环:
1.更新等候栏。
2.调用drawnow
函数,以便正确执行回调。记住MATLAB是单线程的,所以这是必要的,否则在脚本完成之前不会执行回调。
3.执行任何其他计算
4.检查标志设置为true。如果是,则返回停止执行。
标志可以是全局变量,也可以是基于句柄的对象(以便通过引用传递)。
答案 2 :(得分:0)
编辑:
这个答案不适用于当前的问题
此答案仅适用于第一行= #!/usr/bin/matlab
使用pkill
无选项将发送一个TERM信号:
pkill yourscriptname
如果你真的想要与CTRL+C
相同的信号,那么:
pkill -3 yourscriptname
如果您的脚本仍然没有停止,您可以使用最激进的信号KILL:
pkill -9 yourscriptname
当然,如果您知道PID
(进程标识符),则只需使用kill
:
kill yourPID
kill -3 yourPID
kill -9 yourPID
您可以使用以下命令之一获取有关信号的更多信息:
man 7 signal
kill -l
info signal
答案 3 :(得分:0)
我没有做很多GUI,但出于调试目的,我会尝试将按钮回调设置为@keyboard
。就是这样:
set(handleToGuiButton,'Callback',@keyboard)
要实际停止执行,您需要以某种方式将此按钮按下进入正在执行的循环,例如通过全局变量或更高级的东西(例如https://stackoverflow.com/a/8537460/931379)
但我会诚实地看看stoploop
链接(来自另一个答案),然后才能走下这些路线。