当使用Matlab GUI时,如何知道Matlab是否繁忙?

8
我创建了一个小型GUI来操作数据,最近我决定将数据库移动到MySQL服务器上。我创建了一个Java程序来往返传输数据,当访问海外服务器时,我开始注意到延迟。
当您通过命令窗口运行脚本时,Matlab会在左下角显示“忙”文本,但在运行GUI时不会显示。
那我如何知道在使用GUI时Matlab是否忙?
提前致谢。
编辑:快速示例。
我在命令窗口运行(或脚本test.m)
for i = 1:100000
  a = i+i;
  disp(a);
end

状态栏显示“忙碌”。

当我创建一个带有按钮“点击我”的GUI,并执行完全相同的脚本时,状态栏上的繁忙标志不会出现。

为什么会这样,我该怎么办?我想知道我的GUI是否忙碌。


不要依赖于主要IDE中的繁忙标志,您可以实现某种等待栏或将自己的进度消息打印到命令提示符中。这两个想法都在此处讨论:http://blogs.mathworks.com/loren/2007/08/01/monitoring-progress-of-a-calculation/。 - Chris
6个回答

4

主窗口的状态栏上有这样的提示!

编辑:
所以答案是否定的,目前没有简单的方法来判断MATLAB是否正在忙于执行命令行作业以外的其他任务。


这可能与版本有关,但是为什么你需要知道这个呢?我是说,我理解这很好,但它会导致任何功能失调吗? - Ali
不,只是想问一下是否有一种简单的方法可以连接到主窗口中的“忙碌”消息。当服务器不在你家门口时,检索“大量”数据(10,000x10矩阵)需要几秒钟的时间。这将使GUI更加用户友好。GUI在忙碌时会忽略命令,所以这并不是什么大问题。谢谢你的回复。 - Stefan Gretar
我个人在MATLAB上遇到了更加恼人的问题,所以我自动忽略了这些较小的问题。我们在Mac、Windows和Linux机器上使用MATLAB,每个平台的GUI显示方式都不同(它是一个繁忙的UI,有很多小复选框等)。在Lion上它经常崩溃。并行处理工具箱、滤波器设计工具箱等存在一些让人烦恼的问题......总有一天,当我成为老板的时候,我将从MATLAB转向Python+Scipy...... - Ali
3
将MATLAB在不同平台上的GUI外观不同归咎于该软件本身并不是一个合理的抱怨:这是一个操作系统问题。如果您发布了有关并行和滤波设计工具箱的问题,您可能会得到一些有用的解决方案。 - Kavka
“这是操作系统问题”并不是一个花费数千美元的产品的好借口。至于其他问题,我已经与MathWorks(有限地)联系,并向他们发送了崩溃报告(在使用Matlab的日子里不止一次),但这些都是那种讨论它们没有任何益处的错误。如果Matlab工程师在场,我很乐意直接与他们交流讨论。” - Ali

3
您可以使用statusbar,这是由Yair AltmanMathWorks文件交换平台上发布的一个工具,用于修改主MATLAB窗口的状态栏消息。他在他的博客“Undocumented Matlab”中讨论了它的工作原理。

使用此实用程序,即使MATLAB没有自动执行,您也可以放置一个“忙…”消息。您的“单击我”按钮回调的代码可能如下:

...
statusbar(0, 'Busy...');  %# Set the status message
test;                     %# Run your function/script
statusbar(0, '');         %# Clear the status message
...

是的,它是一个不错的小工具,但当我说我创建了一个小GUI时,我撒了谎。对于我这样的新手来说,这是一个相当大的GUI,并且将其添加到所有需要它的回调中太麻烦了。它解决了我的问题,但不是我所希望的解决方案。我认为这个问题已经解决了。感谢您的意见。 - Stefan Gretar

2

您可能正在寻找的是:

在命令行中输入任意代码。

例如,像这样:

asdfasdfasdfasdf

如果GUI例程仍在运行,则它将显示繁忙状态,直到GUI函数结束。只有在此之后,它才能开始执行asdfasdfasdfasdf。

如果GUI已经完成,则会立即执行asdfasdfasdfasdf并显示相应的错误消息。

早期所有Matlab版本在执行由GUI启动的函数时也会显示繁忙消息。自2012年以来,似乎不再是这种情况。


2

如果您关心GUI的用户友好性,可以在GUI本身上添加静态文本,并在计算完成之前/之后将其文本设置为“忙碌”/“空闲”。


0

这个帖子在MathWorks上说可以使用File Exchange entry CmdWinTool来完成。如果你下载了这个文件,你可以使用它来查看MATLAB是否正在忙于CmdWinTool('isBusy')。请注意,CmdWinTool利用了MATLAB在使用Java方面的未公开特性,因此MathWorks不太可能支持它。


0
在你的GUI中添加一个静态文本框。在你的计算图标回调函数中,写入以下代码:
set(handle.text,'string','busy')
pause(0.1)
.
.
.
// Your code
.
.
.
pause(0.1)
set(handle.text,'string','done')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接