如何让Matlab保持mex会话存活
how to let Matlab keep a mex session alive
我的问题是如何编程Matlab和我的c++代码,以便它们可以交互。更具体地说,我有一个c++程序,它处理数据,创建对象,导出该对象的统计信息并写入文件。然后我将在matlab中加载它来做进一步的分析和可视化。然而,处理数据和创建对象所花费的时间是巨大的,而导出统计数据的时间可以忽略不计。另一方面,有许多统计数据和它们的不同组合,很难预测我们将使用哪种组合。所以我希望我可以多次交互地运行"统计"部分,而不重复处理数据的工作。
我的问题是:我可以要求Matlab: 1。调用c++代码;2. 在处理数据并创建对象之后,将该对象保存在内存中。再次调用c++代码,请求将统计数据加载到工作空间中。4. 用不同的统计数据重复3。由于
进一步的选择可能是在您的MEX函数中创建一个c++类实例,并将指向它的指针返回给MATLAB,将指针传递给任何后续调用。如果您使用这种方法,您还应该为它创建一个MATLAB句柄类包装器,以允许您在其析构函数中正确地清理内存。这里有一篇帖子,建议海报者这样做,这是Mathworks FileExchange方法的一个例子。
这个方法对你的问题的适用性取决于问题的复杂程度。我个人只会沿着这条路走下去,如果问题与其他方法是难以解决的复杂(例如,你需要使用某个库中的c++类,并且实例必须在调用之间保持活跃,或者如果全局变量不能做到这一点,因为你需要跟踪很多实例,这自然是最好的c++类数组,在那里你可以适当地分离你的关注)。
实现此目的的一种方法是在c++ mex代码中将想要再次访问的变量声明为全局变量。这些变量将保留在内存中,您可以再次访问它们(当您调用您的mex函数时),直到您清除该mex函数或关闭Matlab会话。我为此使用了全局变量,它对我来说工作得很好。
另一个选择是使用持久变量。从文档
持久变量与全局变量类似,因为MATLAB®软件为两者创建永久存储。它们不同于持久变量中的全局变量仅为在其中声明它们的函数。这可以防止持久的变量不被其他函数或MATLAB改变命令行。
- 为多个会话保留XPtr
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 如何修复 Onnx运行时会话>运行问题?
- 为什么 KMS drmModeSetCrtc() 在 X11 会话中运行时会失败并被拒绝权限?
- 如何在带有 gdb GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb 会话?
- 使用 MEX 编译C++文件
- 宽藤会话更新无休止循环
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 在Win7上,在默认端点上轮询音频会话有时会崩溃
- 当我运行MEX文件时,MATLAB崩溃
- ASIOSDK;从hostsample.cpp生成mex文件时出错
- 自动测试不会显示在会话前端中。虚幻引擎
- CSActiveMQ CPP 生产者 - 一个会话可以使用多个队列吗?
- Tensorflow C++关闭会话后不释放 GPU 资源
- 为什么这段代码(在 Matlab 的 MEX 文件中使用 OpenMP)给出不同的结果?
- 在没有外部文件的情况下在应用会话之间保存变量
- 有没有办法在 C 或 C++ 中嵌入 Sh/Bash 会话?
- 索引和访问 mex 函数中单元数组和矩阵的元素
- 与 Python 中子进程中的另一个应用程序的交互式会话
- 如何让Matlab保持mex会话存活