我正在为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函数相同的线程中运行良好。有什么问题?
答案 0 :(得分:2)
见here。
基本上,答案是mex*
函数不线程安全。这包括mexCallMATLAB
,mexPrintf
和朋友(是的,甚至不应该从多个线程调用mexPrintf)。所有mexCallMATLAB
调用都必须从主线程完成(即与MATLAB本身执行的执行线程相同)。