【问题标题】:Interprocess communication with Matlab on Windows在 Windows 上与 Matlab 进行进程间通信
【发布时间】:2015-05-12 04:46:05
【问题描述】:

我正在 Unity3D 中构建一个游戏,它与 Matlab 中的一些代码集成。我正在寻找一台计算机上从 Unity3D 到 Matlab 的单向通信通道。

消息是一个短字符串。

这些消息的频率非常低。

示例:

  • 我在 Unity3D 中开始我的游戏。

  • 一开始,Unity3D 向 Matlab 发送'message1'

  • 30 秒后 Unity3D 向 Matlab 发送 'message2'

  • 30 秒后 Unity3D 向 Matlab 发送 'message3'

我知道我的编程知识还不够先进,无法独自完成这项工作。我一直在做大量的研究,需要关于我应该专注于什么方面的建议。我不需要任何类型的身份验证协议,因为我只使用一台计算机。

根据我上面的描述,您认为我应该使用哪种 IPC 以及为什么?我需要一个方向来确定我的工作重点在哪里,因为我不是很先进。

  • DLL 在两个进程之间共享内存

  • TCP 套接字

  • UDP 套接字(在我的情况下与 TCP 套接字有什么区别?)

  • (我不能使用命名管道,因为 Unity3D 不支持它。)

【问题讨论】:

  • 频率这么低,为什么不用文件呢?
  • 从 matlab 检测到新消息的时间有多重要? Matlab 是否必须立即或几秒钟后做某事?
  • 我需要立即进行时间检测。不到1秒。我不希望用户感到延迟。文件写入/读取可以做到吗?
  • 对于 Windows 上的单向通讯,有 a million ways。啊,好的,九种方法。原始文件访问(未在此处列出,因为它可能很不稳定)可能是最容易掌握的。在 Unity 中,使用您的消息编写一个临时文件,将其关闭,然后将其重命名为已知名称。在 Matlab 中,轮询命名文件的存在,如果需要,可以同时做其他工作。当文件出现时,阅读它,操作它,然后删除它。 YMMV,它有点依赖于 FS 上的缓存。如果您想要一个更优雅的解决方案,我可能会为此考虑 UDP(套接字)。

标签: matlab dll ipc shared-memory named-pipes


【解决方案1】:

您要使用的是 MATLAB 引擎 API。看 : http://www.mathworks.com/help/matlab/calling-matlab-engine-from-c-c-and-fortran-programs.html?refresh=true

这里发布了一个非常好的详细演示: http://www.umiacs.umd.edu/~jsp/Downloads/MatlabEngine/MatlabEngine.pdf 我已经测试过它并且有效!

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2013-05-11
    相关资源
    最近更新 更多