我的一些朋友编写了一个程序,它使用C程序从网络(UDP)接收数据并使用Matlab来处理收到的数据。两个文件即'数据文件'和'控制文件'用于在Matlab和C之间进行数据通信。方案如下。在Matlab和C之间共享数据
- C程序从网络接收数据,如果'控制文件'包含'0',则将接收到的数据写入'数据文件'中。完全写入数据后,'控制文件'中的'0'被替换为'1'。
- Matlab程序连续在'控制文件'中检查'1',并在'控制文件'中读取'1'后立即从'数据文件'中读取数据。在读取和处理数据后,Matlab在'控制文件'中用'0'代替'1'。
基本上,该方案试图使用'控制文件'作为'锁'来安全地处理'数据文件'中的数据。数据每1毫秒连续收到,处理需要软实时。
虽然声称一切都很完美,但我觉得这里有点可疑。原则上,我们应该使用类似于信号量的东西来正确锁定资源....对吧? 这个方案有什么缺陷?有没有更好的替代方案?
编辑:现在我看到有人建议在Launch one C++ application from another, and communicate with it
我想确切地知道为什么这是一个“脏”技术类似的“快速和肮脏的”技术?它会在所有情况下都成功吗?
如果在打开文件时锁定文件,那么被锁定的文件在性质上与关键区域类似。问题是,这两个应用程序,C和Matlab,是否都使用打开的文件来锁定文件。如果两者都是,那么如果一个文件打开并且被锁定,那么当另一个尝试打开该文件时,该打开将被拒绝。 –
为什么你不直接在MATLAB中执行socket IO? – glglgl
我建议你抛弃整个基于文件的方案。请使用[TCP/UDP/IP工具箱](http://www.mathworks.com/matlabcentral/fileexchange/345-tcpudpip-toolbox-2-0-6)或将C程序移植到MEX文件 – Peter