gpt4 book ai didi

windows - 带有编译应用程序的 Matlab onCleanup (windows)

转载 作者:可可西里 更新时间:2023-11-01 13:26:38 26 4
gpt4 key购买 nike

我有一个用 matlab 编译器制作的应用程序。
我想在它结束时执行一些关闭事件。由于似乎无法在 matlab 中捕获信号(或者我无法捕获信号),因此我检查了使用 onCleanup ( Matlab: Is it possible to create signal handlers (.m scripts) )。它在 matlab( native )中工作,但不在编译的应用程序中。
我尝试使用 CTRL-Ctaskkill(仅适用于 /f)结束应用程序。在这两种情况下,都没有执行 onCleanup 方法。
此处出于测试目的

function sigtest(varargin)
remainder=onCleanup(@()save('exit.mat'));
b=1;
while true
disp(datestr(now));
a=rand(round(5*b));%to be saved
pause(10);
b=a(1);
end

我的源代码,我通过 mcc -m -v sigtest.m 编译的。
作为另一个尝试,我插入了行

myexiter=addlistener(System.AppDomain.CurrentDomain,'ProcessExit',...
@(a,b)save('listexit.mat'));

在第 2 行之后,这个 .NET-Event 也不起作用。

最佳答案

如果您在 M 代码中注册关闭事件,它们只会在正常关闭进程时起作用。 taskkill/f 命令将执行“强制”关闭,我认为这将立即终止进程。 Matlab 解释器将没有机会运行任何仍未决的清理代码。我认为控制台应用程序(已编译的 sigtest.m 将作为其运行)上的 Ctrl-C 将具有相同的效果。这同样适用于 .NET-Event:如果您强行终止该进程,该回调将永远没有机会运行。

如果您想要运行退出代码或任何其他清理内容,您需要找到一种方法让程序确定何时应该退出并自行启动更优雅的关闭。例如,在您的 sigtest 示例中,您可以在每次循环结束时检查标准输入,查看用户是否键入了“退出”,如果是,则调用 exit()。然后你的 onCleanup 东西应该运行。

在 GUI 编译的 Matlab 应用程序中,这更直接;你有 GUI 控件来退出应用程序。我不知道使控制台编译的 Matlab 应用程序响应用户退出请求的规范方法是什么,或者是否有一个好的方法。如果您认为用户可能想要请求正常中止其操作,您可能希望将其设为 GUI 应用程序。

关于windows - 带有编译应用程序的 Matlab onCleanup (windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com