1

mex でコンパイルされた MATLAB 用の C++ モジュールを作成しています。このモジュールで新しいスレッドを開始し、そこから matlab 関数 myCallback を呼び出します。

mxArray *funcName = mxCreateString("myCallback");
mxArray *text - mxCreateString("AAA");
mxArray *call[2] = {funcName, text};
mexCallMATLAB(0, NULL, 2, call, "feval");
...

myCallback 関数:

function myCallback(text)
fprintf(1,'%s\n', text);
end

また、mexCallMATLAB を呼び出した後は何も出力されません。これらの関数は、matlab 関数と同じスレッドで適切に機能します。問題とは何ですか?

4

1 に答える 1

2

ここを参照してください。

基本的に、答えはmex*関数がスレッドセーフではないということです。これにはmexCallMATLABmexPrintf、 、およびフレンドが含まれます (はい、mexPrintf でさえ、複数のスレッドから呼び出すべきではありません)。すべてのmexCallMATLAB呼び出しは、メイン スレッド (つまり、MATLAB 自体と同じ実行スレッド) から行う必要があります。

于 2012-05-23T18:12:19.487 に答える