gpt4 book ai didi

matlab - 定时器函数的错误处理

转载 作者:行者123 更新时间:2023-12-03 07:40:55 24 4
gpt4 key购买 nike

我正在尝试处理发生在我的 timer 中的错误函数( TimerFcnStopFcn ,...)。我的问题是我需要处理实际回调之外的错误。但是,以下方法不起作用:

callback = @(~, ~) error('Oops.');
try
t = timer('TimerFcn', callback);
start(t);
catch e
fprintf('Caught exception: %s\n', e.message);
end

输出是:
Error while evaluating TimerFcn for timer 'timer-5' 

Oops.

我确实理解为什么上面的代码不起作用(毕竟,计时器的想法是异步执行)。但是,我还没有找到任何其他官方方法来实现我的目标(例如,我可以 Hook 的全局错误处理程序)。

到目前为止我发现的唯一解决方法是隐藏 error :
oldError = @error;
errors = {};
error = @(varargin) assignin('base', 'errors', [evalin('base', 'errors'), {varargin}]);
callback = @(~, ~) error('Oops.');
t = timer('TimerFcn', callback);
start(t);
wait(t);

错误现在存储在 errors 中.但是这种方式有很多问题:什么时候恢复原来的 error功能?如何处理定时器函数以外的代码引发的错误? ...

因此: 如何以干净可靠的方式处理计时器函数中的错误?

最佳答案

您可能应该使用 ErrorFcn定时器对象的属性。

一个简单的例子:

>> tcallback = @(~, ~) error('Oops.');
>> ecallback = @(~, ~) disp('Caught error');
>> t = timer('TimerFcn', tcallback, 'ErrorFcn', ecallback);
>> start(t)
Error while evaluating TimerFcn for timer 'timer-2'

Oops.


Caught error

显然,您可以使错误处理更健壮,但它会处理 timer 的异步性质。错误。 ErrorFcn 的输入参数(如果你没有像上面的例子那样抑制它们)提供关于抛出的错误的信息,这样你就可以专门处理它们。

关于matlab - 定时器函数的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18057352/

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