1. 程式人生 > >C++ 在多線程中各自調用matlab

C++ 在多線程中各自調用matlab

gen nco 必須 path col 文件 支持 char null

在C++中調用matlab引擎計算時,註意幾個問題

1、engOpen、engClose ,engEvalString等等接口必須在同一線程中調用、例如:A、B兩個線程,A為主線程,B為子線程

A:中創建Engine *m_ep = engOpen、engClose(m_ep), 在B中調用 engEvalString會導制調用失敗。

必須在B中同時調用,例子如下:

void B:run()

{

  Engine *ep = engOpen(NULL);

  //這是調用matlab的方法

     engEvalString

    engClose(ep)

}

2、多個線各自同時調用malab,例如有A、B、C三個線程同時調用時,要使用engOpenSingleUse(NULL)創建引擎

void A:run()

{

  Engine *ep = engOpenSingleUse(NULL);

  //這是調用matlab的方法

     engEvalString

   engClose(ep)

}

void B:run()

{

  Engine *ep = engOpenSingleUse(NULL);

  //這是調用matlab的方法

     engEvalString

   engClose(ep)

}

void C:run()

{

  Engine *ep = engOpenSingleUse(NULL);

  //這是調用matlab的方法
engEvalString   engClose(ep) }

3、在C++調用matlab時,如何讓matlab找到調用的m文件,方法如下:

//支持中文編碼
engEvalString(ep,"slCharacterEncoding(GBK)");
//添加查找路徑
std::string strFindMPath = "addpath(genpath(‘" + M文件路徑+ "‘));";
engEvalString(ep,strFindMPath);

C++ 在多線程中各自調用matlab