C++ 在多線程中各自調用matlab
阿新 • • 發佈:2018-09-29
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