0

我正在编写一个测试函数,它将在多个场景中运行,并且在每个场景中,我想询问用户是否愿意继续。如果他们说不,那么我将保存变量并退出程序。此函数应该有一个超时,此时代码将继续运行,并且没有选项退出,直到下一个场景开始。我的问题是超时。

我已经研究过设置 questdlg,但设置超时的唯一方法似乎是修改我不能做的 questdlg.m 文件(由于后勤原因)。

创建一个消息框并使用uiwait停止代码效果很好,但是我不知道如何确定用户是否单击了确定按钮或如何使该框在超时后消失。

问题:

如何确定 msgbox 中的按钮是否被按下?

如何让 msgbox 消失?

是否有另一种方法可以询问用户是否愿意在超时后停止运行测试?

4

1 回答 1

2

困难的部分是你的第一个问题。

我的第一个想法(更好的是下面)是建议您根据时间检查用户是否点击 OK 或超时:

tic
hmsg=msgbox('message','title','modal'); 
uiwait(hmsg,5); %wait 5 sec

然后根据时间检查用户是否点击按钮或执行是否由于超时而继续:

if toc < 5 %then the user hit the button before timeout
%no need to close the msgbox  (user already did that)
%appropriate code here...

else %we got here due to timeout
close(hmsg); %close the msgbox
%appropriate code here
end;

如果他们在网络上遇到超时并且它试图关闭已经关闭的窗口,那么您可能会收到错误的小风险。如果这成为一个问题,我认为您可以测试句柄是否有效:

ishandle(hmsg)

在尝试关闭之前。

这是我认为更好的方法

hmsg=msgbox('message','title','modal');
uiwait(hmsg,5); %wait 5 sec

%now check to see if hmsg is still a handle to find out what happened
if ishandle(hmsg) %then the window is still open (i.e. timeout)
   disp('timeout');
   close(hmsg);
   %appropriate code here...
else %then they closed the window
   disp('user hit button');
   %other code here
end;
于 2014-07-03T13:30:31.343 回答