我正在尝试在GUIDE中制作一个从20到0(秒)倒计时的计时器。在此期间,用户将执行简单的操作(单击组按钮中的单选按钮),并在该20秒结束时将显示一条消息(取决于用户单击的按钮)。
我环顾四周,但似乎没有GUIDE的计时器对象(为什么它们不能制作一个,因为它非常有用?)。然而,我试图制作一个和下面的结果,它不起作用。
我在<script>
$(document).ready(function () {
Sys.Application.add_load(function () {
var isPostback = $("#<%=hdnIsPostback.ClientID%>").val() === "ispostback";
$("[id^=cbBold_]").css({ 'font-weight': 'bold' })
if (!isPostback)
$("#ddlPermissions").hide();
$(document).on('click', '[id*=CbList]', function () {
var show = false;
$("#ddlPermissions").hide();
$("[id*=CbList] input:checked").each(function () {
show = true;
});
if (show)
$("#ddlPermissions").show();
});
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function () {
$("[id^=cbBold_]").css({ 'font-weight': 'bold' })
});
});
});
</script>
中初始化了setappdata
:
MyGUI_OpeningFcn
% Initialize setappdata
timeout = 20;
setappdata(handles.figure1,'timeout', timeout);
是单选按钮,Next_calculation
是静态文本。
timerBox
计时器开始后,会调用function Next_calculation_Callback(hObject, eventdata, handles)
[..]
timeout = getappdata(handles.figure1,'timeout');
t = timer('Period', 1.0,... % 1 second
'StartFcn', set(handles.timerBox,'String',num2str(timeout)), ...
'ExecutionMode', 'fixedRate', ... % Starts immediately after the timer callback function is added to the MATLAB execution queue
'TasksToExecute', timeout, ... % Indicates the number of times the timer object is to execute the TimerFcn callback
'TimerFcn', @my_timer ... % callback to function
);
start(t)
来调用TimerFcn
。我应该把句柄传递给my_timer
,但我不确切知道如何。
my_timer
答案 0 :(得分:2)
您需要使用TimerFcn
的自定义匿名函数将必要的数据传递给您的计时器回调
set(t, 'TimerFcn', @(s,e)my_timer(hObject, handles))
然后,您可以将my_timer
回调定义为
function my_timer(hObject, handles)
% Do stuff with handles
end