매트랩의 DLL 함수를 실행하는 .NET 스레드를 중지하는 방법 :깨끗하게 나는이 기능을 네임 스페이스 flagTest 및 클래스 이름 테스트와 매트랩 DLL을 컴파일
function [ ] = flagTest(flag)
while flag
disp(flag);
pause(1);
end
end
나는 C#을 같은에서이 DLL 함수를 호출 할 수 있습니다 이 : 그것은 내가 내 네임 스페이스와 기능 flagTest
모두를 호출하기 때문에 혼란이 발생하는 경우
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);
}
}
}
나는 죄송합니다.
는 내가 지금하고 싶은 스레드를 중지 UI의 버튼을 클릭 (내가하는 방법을 알고) 스레드에서이 T.flagTest(flag)
함수 호출을 넣어 사용자로 false
에 flag
의 값을 변경하는 것입니다. 우리 응용 프로그램의 실제 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 어셈블리에 넣으십시오. 그런 다음 가능한 경우 DoWork (from, to)와 같은 명확한 오프셋을 가진 데이터를 처리 할 수 있도록 Matlab 함수를 작성하십시오. 이 시점에서 당신은 일방적 일 것이기 때문에 당신은 당신의 사물함을 완전히 통제 할 수있을 것입니다. –
예. 그건 내가 생각했던 또 다른 옵션이 될거야 그리고 내 팀원들이 함께 가지 않기로 결정한 C#에 Matlab 코드를 다시 작성해야한다 ...... 나는 주위에 MATLAB 함수를 감쌀 수 있었다. matlab 클래스를 컴파일하고 해당 함수를 dll로 컴파일하고 C#에서 호출합니다.그러나, 내가 직면 한 문제는 클래스 내부의 플래그 속성을 변경할 수 있도록 matlab 클래스를 MWArray 객체로 변환하는 방법을 모른다는 것입니다. 나는 그것이 내가 여기에서 묻는 또 다른 질문이어야 할 것이다라고 생각한다. 다시 한번 감사드립니다. – dangwh