4

通过 GUI 使用 MATLAB 时,我可以通过按Ctrl-来中断计算C

通过MATLAB Engine C API使用 MATLAB 时,有没有办法以编程方式执行相同的操作?

在 Unix 系统上有一个解决方案:发送一个 SIGINT 信号。这不会杀死 MATLAB。它只会中断计算。我正在寻找适用于 Windows 的解决方案。


澄清(看到唯一的回答者误解了):

我正在寻找一种方法来中断任何 MATLAB 计算,而无需控制正在运行的 MATLAB 代码。我正在寻找在 Windows 系统上的 MATLAB 命令窗口中按Ctrl- in 的程序等效项。C这是针对Mathematica-MATLAB 接口的:我需要将中断从 Mathematica 转发到 MATLAB。如上所述,我已经在 Unix 上有了一个可行的实现;这个问题是关于如何在 Windows 上进行的。

4

2 回答 2

1

一种方法是在执行长时间计算之前使 MATLAB 引擎会话可见。这样,如果您想中断执行,只需将可见的命令窗口置于焦点并按 Ctrl-C。

这可以使用engSetVisible函数来完成

这是我尝试使用MATLAB COM Automation的一个简单示例。该过程应该类似,因为MATLAB 引擎是在 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

cmd窗口

于 2013-05-20T21:38:16.030 回答
0

没有直接的方法:所有这些例程都必须展开并清理它们的工作空间,这可能会调用退出处理程序,等等。

我能想到的最接近的方法是让你的主例程有一个 try/catch,然后当你希望中止时,error() 为 catch 键入的特定字符串,当你检测到它时,从你的主程序中彻底退出常规。

于 2013-05-19T13:51:53.973 回答