是否可以在同一台计算机上打开的两个MATLAB窗口之间发送命令?

时间:2017-12-12 10:33:51

标签: matlab

我想在同一台计算机上打开两个MATLAB窗口。所需的场景如下:MATLAB窗口1连续运行与MATLAB窗口2无关的脚本。同时,MATLAB窗口2运行的脚本不断检查某个条件,如果满足,然后它将终止在MATLAB窗口1上运行的脚本,然后也终止自己的脚本。我希望有两个MATLAB窗口,而不是一个,因为我相信它会更有效率地实现我的目标。我在http://au.mathworks.com/matlabcentral/fileexchange/40001-keyinject找到了一个有趣的“KeyInject”程序,但我想知道MATLAB中是否有更简单的方法。

2 个答案:

答案 0 :(得分:1)

我看到了几种方式:

  1. 重组以避免此XY problem

  2. 使用(mat)文件(如Hoki建议的那样),可能使用并行计算工具箱将所有内容保存在一个MATLAB会话中。

  3. 编写一些通过global pipe相互通信的MEX功能。
  4. 撰写Auto(Hot)key脚本。
  5. 选项2 可能最简单。如果用OOP编写,请查看events and listeners,否则,您必须在循环内进行轮询

    选项3 更难以实现方式更耗时,但可以更快地检测到条件,并且会话之间的数据传输速度更快。仅在速度必不可少的情况下使用...但我想这不适用:)

    选项4 :AutoHotkey解决方案可能是你已经在HorribleFonstruction®上做的最恐怖的Thing®,但是哦,真有趣!在两个MATLAB会话中,您分别创建一个名为Window1Window2的(隐藏)图形。这些窗口名称是AutoHotkey可以轻松跟踪的内容。如果满足条件,则更新相应的窗口名称,触发AutoHotkey脚本的其余部分:按下另一个窗口中的按钮!如果需要在窗口之间传输数据:可以在两个GUI中创建基本编辑框,并在它们之间复制粘贴数据。如果您使用的是Linux:您可以将Autokey用于相同的目的,但到那时您基本上是在编写繁重的Python代码,所以只需使用Python即可。

    或者,您知道,使用KeyInject。不那么有趣。

答案 1 :(得分:1)

您想要简单或灵活,无限扩展的1.0版本吗?简单的方法是通过系统B创建的文件触发系统A.

简单会让系统B创建一个文件,然后系统A会使用命令

检查文件
    if exist ( fileName, 'file' )

然后执行关机命令。启动时,系统A将使用

删除该文件
delete ( fileName );

第二个选项是使用udp命令。 UDP允许在进程之间发送任何数据,无论是在同一台计算机上还是通过网络。 (有关详细信息,请参阅https://www.mathworks.com/help/instrument/udp.html。)