実行中の MATLAB セッションへの C++ の接続
ローカル マシンで実行中の共有 MATLAB® セッションに C++ エンジンを接続することができます。共有 MATLAB セッションに接続するには、以下を実行します。
MATLAB を共有セッションとして起動するか、MATLAB 関数
matlab.engine.shareEngine
を使用して実行中の MATLAB プロセスを共有にします。matlab::engine::findMATLAB
またはmatlab::engine::findMATLABAsync
を使用して、共有 MATLAB セッションの名前を検索します。共有 MATLAB セッションの名前を含む
matlab::engine::String
をメンバー関数matlab::engine::connectMATLAB
またはメンバー関数matlab::engine::connectMATLABAsync
に渡します。これらの関数は C++ エンジンを共有セッションに接続します。
matlab::engine::connectMATLAB
や matlab::engine::connectMATLABAsync
を呼び出す際に共有 MATLAB セッションの名前を指定しない場合、エンジンは最初に作成された共有 MATLAB セッションを使用します。使用可能な共有 MATLAB セッションがない場合、エンジンは共有 MATLAB セッションを作成し、このセッションに接続します。
C++ エンジン プログラムを設定およびビルドする方法の詳細については、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.engine.shareEngine
の実行時に、共有 MATLAB セッションの名前を指定することができます。これにより、matlab::engine::findMATLAB
や matlab::engine::findMATLABAsync
を使用して名前を検索する必要がなくなります。
たとえば、MATLAB を起動して、共有セッションに myMatlabEngine
という名前を指定します。
matlab -r "matlab.engine.shareEngine('myMatlabEngine')"
次のサンプル コードは、C++ から myMatlabEngine
という名前の MATLAB セッションに接続します。
メモ
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 共有セッションの名前を検索します。
次のサンプル コードは、myMatlabEngine
という名前の MATLAB 共有セッションを検索し、見つかった場合、それに接続します。
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 セッションに接続することはできません。
参考
matlab::engine::findMATLAB
| matlab::engine::findMATLABAsync
| matlab.engine.shareEngine
| matlab::engine::connectMATLAB
| matlab::engine::connectMATLABAsync