首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计时器函数的错误处理

计时器函数的错误处理
EN

Stack Overflow用户
提问于 2013-08-05 11:45:49
回答 1查看 1.9K关注 0票数 2

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

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

产出如下:

代码语言:javascript
复制
Error while evaluating TimerFcn for timer 'timer-5' 

Oops.

我理解为什么上面的代码不能工作(毕竟,计时器的思想是异步执行)。然而,我还没有找到任何其他正式的方法来实现我的目标(例如,我可以连接到的全局错误处理程序)。

到目前为止,我发现的唯一解决办法是隐藏error

代码语言:javascript
复制
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函数?如何处理由定时器函数以外的代码引发的错误?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-05 12:28:17

您可能应该使用timer对象的ErrorFcn属性。

一个简单的例子:

代码语言:javascript
复制
>> 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的输入参数(如果不像上面的示例那样抑制它们)提供了有关抛出的错误的信息,因此您可以具体地处理它们。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18057352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档