2012-05-23 19 views
1

我正在爲mex創建一個用於MATLAB的C++模塊。我在此模塊中啓動一個新的線程,並從中調用MATLAB函數myCallBack函數:如何從另一個線程調用mexCallMATLAB

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

請參閱下面的答案。它回答了你爲什麼不能在多個線程中使用'mex *'函數的基本問題。但更大的問題是*你爲什麼要嘗試去做。爲什麼?您需要考慮以某種方式重新設計代碼。 – plasma

+0

另請參閱討論[這裏](http://stackoverflow.com/questions/6759088/multithreading-with-matlab)。 – plasma

+0

我將實現一個從服務器接收答案的matlab-client程序。所以這個過程必須是異步的,matlab客戶端不應該等待一個答案來繼續它的程序。 – totoro

回答

2

請參閱here

基本上,答案是mex*函數是而不是線程安全。這包括mexCallMATLAB,mexPrintf和朋友(是的,即使mexPrintf不應該從多個線程中調用)。所有的mexCallMATLAB調用都必須從主線程完成(即與MATLAB本身執行相同的線程)。

相關問題