Mav*_*ick 4 .net c# concurrency matlab
我正在编写一个C#应用程序,我想同时调用不同的matlab函数(来自不同的线程).每个Matlab函数都位于自己编译的.net库中.看来我一次只能调用一个Matlab函数.
即,如果从thread1调用matlab_func1()然后从thread2调用matlab_func2(),则matlab_func2()必须等待matlab_func1()完成执行.
有没有办法同时调用不同的matlab函数?谢谢.
MWArray[] DoKalmanFilter(double vel_x, double vel_y, double vel_z, double cal_x, double cal_y, double cal_z, bool doCal)
{
...set up parameters
ret = KalmanFilter.kalman_actual(6, velx, vely, velz, cal_x, cal_y, cal_z,
return ret;
}
private void DoImageProcessing()
{
..set up parameters
MWArray[] ret = _imgProcessor.DoImageProcessing(2, rgbMarkerColor, hsvThreshold, angleDiffThreshold);
}
Run Code Online (Sandbox Code Playgroud)
我建议当你调用你的函数时,会产生MATLAB(或嵌入到DLL中的MATLAB的实时研讨会),并运行该函数.C#和C之间的MATLAB接口可能有一些全局外部变量,因此MATLAB可能无法在同一进程中生成两次.此外,MATLAB本身在很多方面都是单线程的.他们正致力于更多地使用多核.
我之前使用过Java/Matlab接口,并在此站点上阅读以下内容:Matlab是单线程的.这意味着如果您尝试从直接从Matlab函数调用的Java函数中进行eval或feval,它将等待第一个matlab函数终止.
我可能建议做的测试是将"DoKalmanFilter"和"DoImageProcessing"放入单独的程序集或应用程序中,然后创建一个生成两个新的单独应用程序的应用程序.这样您就可以获得两个进程,MATLAB将在每个进程内运行一次,使您能够同时运行您的函数.
如果有效,你可以开始考虑解决这个问题.您不希望必须一直生成应用程序并将其关闭.您可能需要在流程之间使用一些进程间通信来传递数据,这可能会变得丑陋:-)