Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.net同时调用两个Matlab函数_C#_.net_Matlab_Concurrency - Fatal编程技术网

C# 从.net同时调用两个Matlab函数

C# 从.net同时调用两个Matlab函数,c#,.net,matlab,concurrency,C#,.net,Matlab,Concurrency,我正在编写一个C#应用程序,我想同时调用不同的matlab函数(从不同的线程)。每个Matlab函数都位于自己编译的.net库中。然而,我似乎一次只能调用一个Matlab函数 也就是说,如果从thread1调用matlab_func1(),那么从thread2调用matlab_func2(),matlab_func2()必须等待matlab_func1()完成执行 有没有一种方法可以同时调用不同的matlab函数?谢谢 MWArray[] DoKalmanFilter(double vel_x

我正在编写一个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);
  }

我建议在调用函数时,生成MATLAB(或嵌入到DLL中的MATLAB实时研讨会),并运行函数。C#和C之间的MATLAB接口可能有一些全局外部变量,因此MATLAB可能无法在同一个过程中生成两次。此外,MATLAB本身在许多方面都是单线程的。他们正致力于更多地使用多核

我以前使用过Java/Matlab接口,并阅读了以下内容: Matlab是单线程的。这意味着,如果您试图从直接从Matlab函数调用的Java函数中求值或feval,它将挂起,等待第一个Matlab函数终止

作为测试,我建议将“DoKalmanFilter”和“DoImageProcessing”放在单独的程序集或应用程序中,然后创建一个生成两个新的单独应用程序的应用程序。这样,您将得到两个进程,MATLAB将在每个进程内运行一次,使您能够同时运行函数


如果这是可行的,那么你可以开始想办法解决这个问题。您不想一直在生成应用程序并关闭它们。您可能需要在进程之间使用一些进程间通信来传递数据,这可能会变得丑陋:-)

云计算一路走来,兄弟。你只需要把这个傻瓜指向云端,让亚马逊这样的提供商来处理它

当然,从云端到云端的数据编组会有一定的开销,但这永远不会与matlab中的每个事务的实际工作时间相竞争

这是一个非常低成本的解决方案,它的经济扩展性比您自己的解决方案要好(我这样说的前提是您没有将其停放在世界一流的服务器场上)

下面是一些让我兴奋的事情:

云是真理。

根据

因此,如上所述,您需要创建第二个应用程序,或者至少是第二个进程,而不是第二个线程。但是,您可以将代码保留在一个程序集中—从第二个进程调用同一个程序集将为其提供自己的资源


另一种方法是使用MATLAB的并行处理工具箱将每个函数调用拆分到几个核上,使每个函数运行更快,并按顺序调用它们。然而,这取决于你的MATLAB函数是否适合并行化。

你能发布你用来执行MATLAB调用的代码吗?我的意思是。。这些方法是从不同的线程调用的。你对什么特别感兴趣?我对你投了反对票,因为你的答案虽然可以说是有用的,但在这里并不合适。
A single application only has access to a single MCR computational engine.