【问题标题】:MATLAB gui freeze after running my program运行我的程序后,MATLAB gui 冻结
【发布时间】:2014-10-07 19:23:45
【问题描述】:

我创建了一个 GUI,使用 Parallel computing 来加速 Neural networkSVM 模型。当我在我的 GUI 中启用Parallel computing 时,所有东西(MATLAB、我的 GUI 和我的代码窗口)都将冻结,我也无法最大化这些窗口,但我的程序正在运行,使用工作人员,有时我可以在图表中看到更新和GUI 的值。当我在程序中禁用Parallel computing 时,一切正常。在第一种情况下,有时我的 GUI 会变成黑色(GUI、按钮、文本框和编辑框的背景很好),但值会在创建的 GUI 的迭代中更新。

这是什么问题?

谢谢。

【问题讨论】:

  • 这是用 GUIDE 创建的 gui 吗?
  • 是的。我是用 GUIDE 创建的。
  • 好吧,我刚才估计标准的套路还是挺稳定的。我想知道,并行计算是一直在运行,还是只是偶尔运行?
  • 我可以在我的 GUI 中选择是否要使用 parallel computing。此功能的默认设置是开启的,所以在 90% 中我正在使用 parallel computingParfor 循环)。
  • 好的,我明白了。我听说有人对此有问题,但我不完全确定是什么原因造成的。 我也猜想当你不运行并行计算时这不是问题? 但是,我有一个猜测。猜测是 matlab 中的绘图数据存储为指向其他位置的指针。当您移动 gui 时,matlab 会尝试到达此内存位置。但是,为了防止未定义的行为,在parfor-loop 结束之前不能访问数据。这可以使 gui 变黑,直到它可以更新。这可能要到一段时间后才会出现。这对你有意义吗?

标签: matlab parallel-processing neural-network svm matlab-guide


【解决方案1】:

抱歉回复晚了。在这里很难对解决方案给出明确的答案。这个问题是相当高级的,大部分代码我们无能为力。 parfor 中发生的情况可能是 matlab 在它目前访问的元素上放置了某种锁(mutex 或其他东西)。此外,由于parfor 并行工作,因此循环中的任何数据都不太可能未被触及。我能看到的唯一解决方案是您运行较短的进程。这将允许您的 gui 在进程之间进行更新。

drawnow 放在您希望更新 gui 的位置可能会起作用。

其他选项也可以是将 gui 放置在不需要移动它或将其停靠到 matlab 主窗口的位置。但这些都是捷径,只会隐藏问题。

【讨论】:

  • Patrik,谢谢您的回答。在您的帮助下,我找到了解决方案。我将pause(0.0001)drawnow 放在parfor 循环的末尾或之后。现在变黑的时间是1秒。 1秒后gui外观正常。现在有了这个解决方案,我们可以找到一个通用的解决方案。 +我现在不知道如何完全删除它(1秒恢复正常)。请添加这个答案,现在我们可以讨论诸如drawnow 之类的女巫功能或我们可以使用的其他功能或我们应该将这些功能放在哪里。
  • 是的,我猜这应该可以解决问题。通常情况下,我会建议将暂停放在循环之后。
  • 我认为最好的解决方案是现在在parfor 循环之外进行平局。我想如果你把每个线程放在循环中,你很可能会在错误的时间停止它。我没有看到你的代码,但在描述上它似乎是一个会持续一段时间并动态更新的程序。这可能是由一个while循环左右驱动的。通常更新屏幕是你做的最后一件事,所以我建议在主循环的末尾有一个pausedrawnow
  • 再次感谢您的帮助。你对pause函数的持续时间有什么建议?
  • @user2991243 取决于代码。试着把它放在parfor loop 之外。这是唯一的建议。
猜你喜欢
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2015-11-21
相关资源
最近更新 更多