运行我的程序后MATLAB gui冻结

运行我的程序后MATLAB gui冻结,matlab,parallel-processing,neural-network,svm,matlab-guide,Matlab,Parallel Processing,Neural Network,Svm,Matlab Guide,我创建了一个GUI,它使用并行计算来加速神经网络和支持向量机模型。当我在GUI中启用并行计算时,所有东西(MATLAB、我的GUI和我的代码窗口)都将冻结,我也无法最大化这些窗口,但我的程序正在工作,使用workers,有时我可以在图形和GUI值中看到更新。当我在程序中禁用并行计算时,一切正常。在第一种情况下,有时我的GUI会变成黑色(GUI的背景、按钮、文本框和编辑框都很好),但值会在创建的GUI的迭代中更新 这是什么问题 谢谢。很抱歉回答晚了。这里很难给出一个明确的答案。这个问题相当严重,我

我创建了一个GUI,它使用
并行计算
来加速
神经网络
支持向量机
模型。当我在GUI中启用并行计算时,所有东西(MATLAB、我的GUI和我的代码窗口)都将冻结,我也无法最大化这些窗口,但我的程序正在工作,使用workers,有时我可以在图形和GUI值中看到更新。当我在程序中禁用并行计算时,一切正常。在第一种情况下,有时我的GUI会变成黑色(GUI的背景、按钮、文本框和编辑框都很好),但值会在创建的GUI的迭代中更新

这是什么问题


谢谢。

很抱歉回答晚了。这里很难给出一个明确的答案。这个问题相当严重,我们无法对大多数代码进行处理。在
parfor
中发生的事情可能是matlab在它当前访问的元素上设置了某种锁(
mutex
或其他东西)。此外,由于
parfor
并行工作,因此循环中的任何数据都不太可能保持不变。我能看到的唯一解决方案是运行更短的进程。这将允许您的gui在进程之间进行更新

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


其他选项还可以是将gui放置在不需要移动或将其固定到matlab主窗口的位置。但这些都是捷径,只会掩盖问题

这是用GUIDE创建的gui吗?是的。我用GUIDE创建了它。好吧,我刚才我猜标准例程是相当稳定的。我想知道,并行计算是一直在运行,还是只是偶尔运行?我可以在我的GUI中选择我想使用的
并行计算
。此功能的默认设置是打开的,因此在90%的情况下我使用的是
并行计算
Parfor
循环)。好的,我明白了。我听说有人对此有问题,但我不完全确定是什么原因造成的。我也猜这不是一个问题,当你不运行并行计算?然而,我有一个猜测。猜测是matlab中的绘图数据存储为指向其他位置的指针。当您移动gui时,matlab会尝试到达该内存位置。但是,为了防止未定义的行为,在
parfor
-循环结束之前无法访问数据。这会使gui变黑,直到可以更新为止。这可能要过一段时间。这对你有意义吗?帕特里克,谢谢你的回答。在你的帮助下,我找到了解决办法。我将
pause(0.0001)
drawnow
放在
parfor
循环的末尾或后面。现在变黑的时间是1秒。1秒后,gui外观正常。现在有了这个解决方案,我们可以找到它的一般解决方案我现在不知道如何完全移除它(1秒后恢复正常)。请加上这个答案,现在我们可以讨论巫婆函数,比如
drawnow
,或者我们可以使用的其他函数,或者我们应该把这些函数放在哪里。是的,我想这应该可以做到。通常情况下,我会建议在循环之后暂停。我认为最好的解决方案是在
parfor
循环之外进行平局。我猜如果循环中有线程,很可能会在错误的时间停止每个线程。我没有看到你的代码,但在描述中,它似乎是一个将持续一段时间并动态更新的程序。这可能是由while循环驱动的。通常情况下,更新屏幕是您要做的最后一件事,因此我建议在主循环结束时进行
暂停
drawnow
。再次感谢您的帮助。您对
暂停
功能的持续时间有何建议?@user2991243,具体取决于代码。只要试着把它放到
parfor循环之外
。这是唯一的建议。