Matlab waitbar - 关闭所有不起作用

s5s*_*s5s 2 matlab figure

我有一些代码创建一个等待栏:

if long_process %user specifies this true/false
    h = waitbar(1/4, msg);
end
process(arg1,arg2);
Run Code Online (Sandbox Code Playgroud)

过程是一些功能,可以进行一些绘图.如果我在某个地方进行CTRL-C并且我左边有一个数字窗口,我可以关闭所有并且数字消失.但是,等待栏仍然存在.我不知道如何用"全部关闭"来关闭这个东西.

这是困扰的原因是因为当我开始调试时,我经常会打开20多个等待栏.'全部关闭'然后派上用场.

gno*_*ice 15

实际上,CLOSE函数为您提供了一些更"强大"的选项:

close all hidden
close all force
Run Code Online (Sandbox Code Playgroud)

如果由于某些原因那些不起作用,你有一个"核"选项是删除所有数字,包括隐藏句柄的数字,如CLOSEWAITBAR文档中所建议的:

set(0, 'ShowHiddenHandles', 'on');
delete(get(0, 'Children'));
Run Code Online (Sandbox Code Playgroud)

您可能会发现最简单的方法是创建自己的辅助函数来为您执行此操作(并将状态返回close到其默认close状态),因此您没有那么多的类型:

function killEmAll
  set(0, 'ShowHiddenHandles', 'on');
  delete(get(0, 'Children'));
  set(0, 'ShowHiddenHandles', 'off');
end
Run Code Online (Sandbox Code Playgroud)


......甚至第三种选择是通过使用waitbar对象来尝试完全避免问题(如果代码的组织允许)!如果您运行以下示例代码,当您从无限循环中CTRL-C时,应自动删除等待栏:

function runprocess
  h = waitbar(1/4, 'la la la...');
  waitObject = onCleanup(@() delete(h));
  process();
end

function process
  i = 1;
  while (i > 0)
    i = i + 1;
  end
end
Run Code Online (Sandbox Code Playgroud)

  • `onCleanup`对象是要走的路.在所有文档说:"函数终止时,所有对象中的局部变量都被隐式清除,无论是正常完成还是强制退出,如错误或**Ctrl + C**. F终止,MATLAB通过调用其对象析构函数方法清除cleanupObj对象." (2认同)