Подключите C++ к выполняемому сеансу работы с MATLAB

Вы можете подключить механизм C++ к общему MATLAB® сеансы, выполняемые на локальном компьютере. Для подключения к общему сеансу работы с MATLAB:

  • Запустите MATLAB как сеанс совместной работы или сделайте текущий процесс MATLAB общим с помощью matlab.engine.shareEngine Функция MATLAB.

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

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

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

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

Подключение к общему 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.engine.shareEngine Функция MATLAB. Это устраняет необходимость использования 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;
    }
}

См. также

| | | |

Похожие темы