Abort external code process called by Matlab

조회 수: 2 (최근 30일)
Yonatan Nethanel
Yonatan Nethanel 2020년 1월 7일
댓글: Guillaume 2020년 2월 3일
Hi!
I have a c# function called by matlab, which takes long time to process. Also, I need the ability to raise a c# flag (used for aborting the process) from a UI .
So I need to do something like the follow:
%%
% on main file:
% launching the ui with the abort button
UI_guide();
% calling the long c# function
long_c_sharp_function();
%%
% on the guide .m file:
function button_pressed_callback()
c_sharp_function_to_raise_flag();
end
The problem is, the "abort" button callback is executed only after the long function finished - which mean I can't abort the process.
what can i do to solve this problem? should i consider another method?

답변 (1개)

Andrew Janke
Andrew Janke 2020년 1월 31일
There's no general mechanism for aborting a C# function call. The C# function has to be written specifically to support aborting, and you'll need to call it on a separate worker thread to allow your main thread to do the timeout and then call the abort.
  댓글 수: 3
Andrew Janke
Andrew Janke 2020년 2월 3일
Ah. In that case, you need to run your C# code on another thread. Run your C# code using the C# Task mechanism - https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/task-based-asynchronous-programming - and that will leave the Matlab execution thread free for your GUI callbacks to happen on.
Guillaume
Guillaume 2020년 2월 3일
I'm confused by the question, " I need the ability to raise a c# flag (used for aborting the process) from a UI" really sounds like you want matlab to be the one that send the abort signal to a long running C# code. In that case, as Andrew wrote there is no mechanism for that. Matlab is single threaded and if it has handed control to C#, there's nothing it can do in the meantime.
However, indeed if your C# code spawn a new thread doing the actual processing and returns immediately (using tasks for example), then yes matlab can then continue to do processing and then sets a flag. All the async logical needs to be implemented on the C# side, matlab can't help you with it.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by