Соединение C++ с рабочим сеансом работы с MATLAB

Можно соединить механизм C++ с разделяемыми сеансами MATLAB®, которые работают на локальной машине. Соединяться с разделяемым сеансом работы с MATLAB:

  • Запустите MATLAB как сеанс совместной работы или сделайте совместно использованное использование процесса рабочего MATLAB функции MATLAB matlab.engine.shareEngine.

  • Найдите имена сеансов совместной работы MATLAB с помощью matlab::engine::findMATLAB или matlab::engine::findMATLABAsync.

  • Передайте matlab::engine::String, содержащий имя разделяемого сеанса работы с MATLAB к функции членства matlab::engine::connectMATLABAsync или matlab::engine::connectMATLAB. Эти функции соединяют механизм C++ с сеансом совместной работы.

Если вы не задаете имя разделяемого сеанса работы с MATLAB при вызове matlab::engine::connectMATLAB или matlab::engine::connectMATLABAsync, механизм использует первый разделяемый созданный сеанс работы с MATLAB. Если нет никаких разделяемых доступных сеансов работы с MATLAB, механизм создает разделяемый сеанс работы с MATLAB и подключения к этому сеансу.

Для получения информации о том, как установить и создать программы механизма C++, видит Сборку Программы Engine C++.

Соединение с разделяемым MATLAB

Этот пример кода соединяется с первым разделяемым найденным сеансом работы с MATLAB.

#include "MatlabEngine.hpp"
void syncConnect() {
    using namespace matlab::engine;

    // Connect to shared MATLAB session
    std::unique_ptr<MATLABEngine> matlabPtr = connectMATLAB();
}

Соединение с разделяемым MATLAB асинхронно

Этот пример кода соединяется с первым разделяемым сеансом работы с MATLAB, найденным асинхронно.

#include "MatlabEngine.hpp"
void asyncConnect() {
    using namespace matlab::engine;

    // Find and connect to shared MATLAB session
    FutureResult<std::unique_ptr<MATLABEngine>> futureMATLAB = connectMATLABAsync();
        ...
    std::unique_ptr<MATLABEngine> matlabPtr = futureMATLAB.get();
}

Определение имени сеанса совместной работы

Можно задать имя разделяемого сеанса работы с MATLAB, когда вы выполняете функцию MATLAB matlab.engine.shareEngine. Выполнение так избавляет от необходимости использовать matlab::engine::findMATLAB или matlab::engine::findMATLABAsync, чтобы найти имя.

Например, запустите MATLAB и назовите сеанс совместной работы myMatlabEngine.

matlab -r "matlab.engine.shareEngine('myMatlabEngine')"

Этот пример кода соединяется с сеансом работы с MATLAB под названием myMatlabEngine с C++.

Примечание

Запустите именованный сеанс работы с MATLAB прежде, чем соединиться из Кода С++.

#include "MatlabEngine.hpp"
void connectToML() {
    using namespace matlab::engine;

    // Connect to named shared MATLAB session started as:
    // matlab -r "matlab.engine.shareEngine('myMatlabEngine')"
    std::unique_ptr<MATLABEngine> matlabPtr = connectMATLAB(u"myMatlabEngine");
}

Нахождение и соединение с именованным сеансом совместной работы

Чтобы соединиться с именованным сеансом совместной работы MATLAB, используйте matlab::engine::findMATLAB или matlab::engine::findMATLABAsync, чтобы найти имена всех доступных именованных сеансов совместной работы MATLAB.

Этот пример кода пытается найти сеанс совместной работы MATLAB под названием myMatlabEngine и подключения к нему, если сеанс найден.

void findNConnect() {
    using namespace matlab::engine;

    // Find and connect to shared MATLAB session
    std::unique_ptr<MATLABEngine> matlabPtr;
    std::vector<String> names = findMATLAB();
    std::vector<String>::iterator it;
    it = std::find(names.begin(), names.end(), u"myMatlabEngine");
    if (it != names.end()) {
        matlabPtr = connectMATLAB(*it);
    }

    // Determine if engine connected
    if (matlabPtr){
        matlab::data::ArrayFactory factory;
        matlab::data::CharArray arg = factory.createCharArray("-release");
        matlab::data::CharArray version = matlabPtr->feval(u"version", arg);
        std::cout << "Connected to: " << version.toAscii() << std::endl;
    }
    else {
        std::cout << "myMatlabEngine not found" << std::endl;
    }
}

Смотрите также

| | | |

Похожие темы