メインコンテンツ

実行中の MATLAB セッションへの C++ の接続

ローカル マシンで実行中の共有アウトプロセス MATLAB® セッションに C++ エンジンを接続できます。

共有 MATLAB セッションに接続するには、以下を実行します。

セッション名を指定しなかった場合、エンジンは使用可能な最初の共有 MATLAB セッションに接続します。使用可能なセッションがない場合は、新しいセッションを作成して接続します。

設定とビルドの手順については、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::findMATLABmatlab::engine::findMATLABAsync を呼び出す必要がなくなります。

名前付き共有セッションを指定して MATLAB を起動します。

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

C++ から名前付きセッションに接続します。

メモ

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::findMATLABmatlab::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;
    }
}

複数スレッド環境での接続

複数スレッド環境で共有 MATLAB セッションに接続できます。

  • C++ アプリケーションの個別スレッドから異なる共有 MATLAB セッションに接続する。

  • 複数のエンジン アプリケーションから MATLAB の単一セッションに接続する。

メモ

同じプロセスの複数のスレッドを使用して単一の共有 MATLAB セッションに接続することはできません。

参考

| | | |

トピック