C++ 在多线程中各自调用matlab

在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);

 

转载于:https://www.cnblogs.com/math-turing/p/9722015.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值