我正在开发一个应用程序,其中有两个程序同时运行:一个在 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/