c++ - 在 MATLAB 和 C++ 之间交换数据最有效的方法?

标签 c++ matlab

我正在开发一个应用程序,其中有两个程序同时运行:一个在 C++ 中,另一个在 MATLAB 中。

C++ 程序定期生成三个数值作为输出。 MATLAB 程序需要定期访问三个输出,但在不同的时间段内。

目前,我已经使用 .txt 文件解决了这个问题。当例程完成时,C++ 写入此文件,MATLAB 在需要时从该文件中读取。

但是,使用 textscan 命令,MATLAB 需要大约 1.5 毫秒才能使用 Pentium I5-4250U 读取 .txt。所以,我想知道是否有更快的方法来解决这个问题。

最佳答案

A:是的,使用消息传递层

如果不需要其他服务,C++ 端将充当信息提供者( ZMQ.PUB 发布者 ),MATLAB 端将充当信息订阅者( <强>ZMQ.SUB)。

这样,与消息传递相关的低级细节将由分布式处理消息传递层解决,您的解决方案将受益于速度、现成的工具,并且可以分布到私有(private)网格计算/云计算上架构、使用相同的仪器、获得额外的性能等。

ZeroMQ 具有 C++ 和 MATLAB 的绑定(bind),因此这是一个开始和尝试进程到进程消息传递层方法的地方。

% MATLAB script to setup zeromq-matlab
clear all;
if ~ispc
    s1 = zmq( 'subscribe', 'ipc', 'MATLAB' );   %% using IPC transport on <localhost>
else
    disp('0MQ IPC not supported on windows. Setup TCP transport class instead')
    disp('Setting up TCP')
    s1 = zmq( 'subscribe', 'tcp', 'localhost', 5555 );
end

recv_data1 = [];                                %% setup RECV buffer

MATLAB 绑定(bind)位于 here .

有一些 float 要发送,延迟将在数百甚至数十[usec]以下,因为您的通知提到了数据分发的异步模式,因此本地主机将只花费一些时钟从本地主机 ZMQ 检索数据.SUB队列。

更复杂的应用程序到应用程序信号传输是可能的,只需从 ZeroMQ Guide 中获得启发即可。

关于c++ - 在 MATLAB 和 C++ 之间交换数据最有效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26681941/

相关文章:

c++ - 条件三元运算符中的模

image - 构建根据 RGB 强度排序的图像矩阵

matlab - 如何在 Matlab 符号方程中产生方波

class - 如何在 MATLAB 中定义一个类,该类使用在单独的文件(@ 文件夹中)中定义的方法?

c++ - 将 void* (char* without\0) 转换为 std::string

c++ - ifstream 试图引用已删除的函数

matlab - 无穷大复数乘法的奇怪规则

c - 这个c文件的mexFunction怎么写

c++ - 类模板中的静态函数指针成员

c++ - 继承和默认构造函数