Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我正在编写一个C#应用程序,我想同时(从不同的线程)调用不同的matlab函数。每个Matlab函数都位于其自己的已编译.net库中。看来我一次只能调用一个Matlab函数。
即,如果从线程1调用matlab_func1(),然后从线程2调用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); } 回答: 我建议您在调用函数时,生成MATLAB(或嵌入到DLL中的MATLAB实时车间)并运行该函数。 C#和C之间的MATLAB接口可能具有一些全局外部变量,因此,在同一过程中可能无法两次生成MATLAB。而且,MATLAB本身在许多方面都是单线程的。他们正在努力使更多的人使用多核。 我以前使用过Java / Matlab接口,并在此站点上阅读以下内容:Matlab是单线程的。这意味着,如果您尝试从直接从Matlab函数调用的Java函数中进行eval或feval,它将挂起,等待第一个matlab函数终止。 作为测试,我可能建议将“ DoKalmanFilter”和“ DoImageProcessing”放入单独的程序集或应用程序中,然后创建一个产生两个新的单独应用程序的应用程序。这样,您可以获得两个进程,MATLAB将在每个进程中运行一次,从而使您能够同时运行函数。 如果可行,那么您可以开始考虑解决此问题的方法。您不希望必须一直生成应用程序并关闭它们。您可能需要在进程之间使用一些进程间通信来传递数据,这可能很难看:-) 更多&回答... |
![]() |
![]() |