基于用户输入的Matlab定时窗口停止代码



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

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

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

问题:

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

如何使提示框消失?

是否有另一种方法来询问用户是否想要停止运行测试超时?

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

我的第一个想法(更好的想法在下面)是建议你根据时间检查用户是点击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;

相关内容

  • 没有找到相关文章

最新更新