MathWorks社のMATLAB DLL関数が実行されている.NETのスレッドを停止する方法:きれいに私はこの関数で名前空間flagTestとクラス名のテストでMatlabのDLLをコンパイル
function [ ] = flagTest(flag)
while flag
disp(flag);
pause(1);
end
end
は、私はC#のようで、このDLL関数を呼び出すことができますこの:
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//create test class object
flagTest.test T = new flagTest.test();
MWLogicalArray flag = new MWLogicalArray(true);
//call matlab function flagTest
T.flagTest(flag);
}
}
}
私は私の名前空間と機能flagTest
の両方を呼び出すので、それは混乱が生じた場合、私は申し訳ありません。私は今、何をしたいか
は(私が行う方法を知って)スレッド上でこのT.flagTest(flag)
関数呼び出しを入れて、false
にflag
の値を変更するユーザーとしてスレッドを停止するUI上のボタンをクリックすることです。私たちのアプリケーションの実際のMATLAB関数では、関数スレッドを停止する前に、現在のファイルの読み込みを終了し、メモリ内のデータをディスクに書き込むなど、かなりの作業を行う必要があります。私は、MATLAB関数で何もせずにスレッドを停止することはできません。
.NETからMatlabへの参照によってオブジェクトを渡す方法を見つけられなかったので、この機能を実現するにはどうしたらいいのでしょうか。
Tommasoに電話してください。ありがとうございました!しかし、matlab deploytoolを使用してスタンドアロン関数のみをコンパイルできるように見えるので、このクラスを.NET dllにコンパイルする方法はわかりません。私は[this](https://stackoverflow.com/questions/15747411/how-to-compile-matlab-class-into-c-lib)を読んでいますが、100%はそれがどのように機能するのかまだ理解していませんリンクはC++コードで 'GlobalData'クラスを直接生成しないので、クラスを使用することはできず、クラス内の別のメソッドを呼び出すことはできません。 – dangwh
私は別の方法を考えていました。すべてのループをMatlabの外に持ち込み、.NETアセンブリに組み込みます。そして、Matlab関数を書いて、できるだけDoWork(from、to)のような明確なオフセットを持つデータを処理できるようにします。この時点で、あなたは片面になるのであなたのスレッドを完全に制御することができます。 –
はい。それは私が考えている別のオプションになりますし、私のチームメイトが一緒に行かないことに決めたMatlabコードをC#に書き直すことがたくさん必要です......私はMatlab関数をその関数をdllとしてコンパイルし、C#から呼び出します。しかし、私が直面している問題は、クラス内のflagプロパティを変更できるように、私はmatlabクラスをMWArrayオブジェクトに変換する方法を知らないということです。私はここで尋ねる別の質問でなければならないと思う。もう一度ありがとうございます。 – dangwh