findobj在计时器回调中失败

时间:2012-03-30 19:27:26

标签: matlab timer

我正在用GUID编写的大型程序中测试一个计时器,我遇到了这些奇怪的结果。

function checkfordone_openningFcn(hObject, eventdata, handles, varargin)
…
handles.t = timer(‘TimerFcn’,@IsDataReady,’ExecutionMode’,’fixedRate’,’Period,4);

start(handles.t)

function IsDataReady(timerObject, eventdata)
    fHandles = findobj(‘type’,’figure’,’tag’,’figure1’)

end

定时器函数回调IsDataReady在第一次调用时返回一个有效的句柄。之后它只返回null。

1 个答案:

答案 0 :(得分:3)

我提供了解决这个问题的方法,因为它花了好几天才找到;主要是因为它深埋在我们中等规模可部署应用程序的内部。

在GUIDE中,主图,figure1,将HandleVisibility设置为回调,这是默认值。这意味着“句柄在回调例程中可见,或者由回调例程调用的函数可见,但不能从命令行调用的函数中看到。”HandleVisibility也可以设置为“on”或“off”。在上面的代码中,第一次调用IsDataReady时它是一个回调函数,因此findobj找到了句柄。每次在此之后,计时器必须在不同的空间中执行,并且findobj返回null。解决方案是将父图的HandleVisibility更改为“on”或使用findall命令。

fHandles = findall(0,'type','figure','tag','figure1')

这里零表示根对象,因此搜索所有子对象。