実行中の 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++ エンジン プログラムを設定およびビルドする方法の詳細については、Requirements to Build C++ Engine Applicationsを参照してください。
共有 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