通过GUI使用MATLAB时,我可以通过按 Ctrl - C 来中断计算。
通过the MATLAB Engine C API使用MATLAB时,有没有办法以编程方式执行 ?
在Unix系统上有一个解决方案:send a SIGINT signal。这不会杀死MATLAB。它只会中断计算。我正在寻找适用于Windows的解决方案。
澄清(看到唯一的回答者误解了):
我正在寻找一种方法来中断任何MATLAB计算,而无需控制正在运行的MATLAB代码。我正在寻找在Windows系统上的MATLAB命令窗口中按 Ctrl - C 的程序化等效项。这是针对a Mathematica-MATLAB interface的:我需要将Mathematica的中断转发到MATLAB。如上所述,我已经在Unix上有一个工作实现;这个问题是关于如何在Windows上进行的。
答案 0 :(得分:1)
一种方法是在执行长计算之前使MATLAB Engine会话可见。这样,如果要中断执行,只需将可见命令窗口置于焦点并按Ctrl-C。
这可以使用engSetVisible
函数
这是我尝试使用 MATLAB COM Automation 的一个简单示例。该过程应该类似,因为 MATLAB Engine 是在Windows上使用COM实现的(管道在Unix上使用)。
脚本编写在Powershell中完成:
# create MATLAB automation server
$m = New-Object -ComObject matlab.application
$m | Get-Member
# make the command window visible
$m.Visible = $true
# execute some long computation: pause(10)
$m.Feval('disp', 0,[ref]$null, 'Press Ctrl-C to interrupt...')
$m.Feval('pause', 0,[ref]$null, 10)
# close and cleanup
$m.Quit()
$m = $null
Remove-Variable m
在暂停期间,您可以通过在命令窗口中按 Ctrl + c 来打破它:
答案 1 :(得分:0)
没有一种直接的方法:所有这些例程都必须解开它们的工作空间 清理,可能会调用退出处理程序,等等。
我能想到的最接近的是让你的主程序有一个try / catch 然后当你想中止时,error()表示特定的字符串 catch是关键,当你发现它时,从你的身上干净地拯救 主要例程。