问题标签 [infinite-loop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
566 浏览

objective-c - 方法/IBAction 陷入无限循环。仍然没有成功

现在这可能听起来像我之前的问题/问题,但我已经改变并尝试了一些在我的其他问题中得到回答的东西,试图让它发挥作用,但我仍然遇到同样的问题。

我正在从 NSManagedObject 子类中观察核心数据属性,并且在属性更改时调用的方法调用另一个方法,但在此方法中,它添加了触发 KVO 方法的核心数据对象,该方法再次触发该方法等等。或者看起来,我不太确定,因为似乎发生了一些不同的事情,这是一系列事件......</p>

  1. 我单击一个与 iCal 同步的按钮(这在 IBAction 中,与方法 syncKVO 中的代码完全相同)。此同步工作正常。
  2. 我在大纲视图中添加了一个对象。一切都很好。
  3. 我更改了它的名称以触发与 iCal 同步的 KVO 声明(因为我更改了“名称”属性)。工作正常。
  4. 我删除了刚刚添加的对象,它以某种方式触发了 KVO 声明(从而触发了该方法)并将我置于无限循环中。

现在来看一些代码。

NSManagedObject 子类(称为 JGManagedObject)内的代码……</p>

KVO 声明(在 App Delegate 内)……</p>

方法(也在 App Delegate 中)……</p>

我试过的……</p>

过滤调用 KVO 声明的键路径

分离和重新附加观察者

但是它第一次工作但第二次停止该方法说它不能删除观察者,因为它没有观察,这没有意义,因为我第一次再次添加了观察者。这就是为什么我将这段代码排除在实际方法之外,否则它会在第二次同步时停止。

我不确定这是怎么回事,我想我已经尝试了一切。出了什么问题?

任何帮助将不胜感激。

0 投票
2 回答
748 浏览

objective-c - 停止循环

0 投票
2 回答
1712 浏览

xslt - 当测试挂在无限循环中时

我正在使用 XSLT 1.0 对字符串进行标记,并试图防止空字符串被识别为标记。这是基于XSLT Cookbook的整个函数:

string我传入的值是:

欧洲;#6;#Global;#3;#Middle East, Africa and Caucasus;2;#Europe;#6;#Global;#3;#Middle East, Africa and Caucasus

£$指示符就在那里,所以我看不到空字符串输出。这是在 SharePoint 中,因此很难调试。)

此代码挂起 XSLT 的处理。导致问题的行是<xsl:when test="not($delimiter) and $string != ''">. 一旦我删除第二个and测试,它就会再次起作用。我也试过and string($string)没有成功。

任何人都知道为什么会发生这种情况以及如何解决它?

0 投票
12 回答
17083 浏览

php - 无限循环在 PHP 中什么时候有用?

在阅读 Paul Hudson 的优秀在线PHP教程时,他说

也许令人惊讶的是,无限循环有时对您的脚本很有帮助。由于无限循环在没有外部影响的情况下永远不会终止,因此最流行的使用方法是在条件匹配时跳出循环和/或完全从循环内退出脚本。您还可以依靠用户输入来终止循环 - 例如,如果您正在编写一个程序来接受人们输入数据的时间,那么让脚本循环 30,000 次甚至 300,000,000 次是行不通的. 相反,代码应该永远循环,不断地接受用户输入,直到用户按下 Ctrl-C 结束程序。

请给我一个简单的运行示例,说明如何在 PHP 中使用无限循环?

0 投票
2 回答
3189 浏览

git - Hudson无限循环轮询Git存储库中的更改?

用于 hudson 的 git 插件运行良好。但是,构建脚本必须更新存储库中文件中的版本号,提交并推送回存储库。

当 Hudson 轮询 next 以检查更改时,它会进入无限循环,因为它将提交视为“更改”再次构建,它提交更改,因此再次构建,然后提交另一个更改,等等......你得到这个想法。

我停止了它,在每个存储库中运行了一个“git log”,并使用 git ls-tree HEAD 比较了最新的提交 ID 完全相同

此外,Hudson 运行此命令来检查更改:

git fetch +refs/heads/ :refs/remotes/origin/ git ls-tree HEAD

由于 Hudson 本身从其工作区存储库中推送了提交,并且显然 ls-tree 结果匹配,该命令如何确定存在更改?

似乎它必须在构建之前存储 ls-tree 的结果,并与没有最新提交的结果进行比较。啊。我可以尝试关闭提交以测试该理论。

无论如何,与其修复 Hudson 的 git 插件中的任何问题,我可以做些什么来确保在我的构建结束时 repos 是相同的并且 Hudson 会看到它。

如何解决这个问题?有任何想法吗?

韦恩

0 投票
6 回答
10425 浏览

python - 从不接受信号的卡住 python 进程获取堆栈跟踪

我必须运行一个遗留的 Zope2 网站并对它有些不满。最大的问题是,有时它只是锁定,以 100% 的 CPU 负载运行,不再响应请求。虽然该问题无法定期重现,但包含 3 个动态图的页面有时会触发它,因此我怀疑某种竞争条件会导致无限循环或卡住的忙等待。

问题是,我还没有找到调试这个东西的方法。Zope 日志中没有任何内容,系统日志中也没有任何内容。我尝试了这个问题的建议来获取堆栈跟踪,但唯一有效的信号是SIGKILL.

当它卡住时,是否还有另一种可能性来找出该过程的确切位置?

0 投票
2 回答
2058 浏览

sql - SQL-Server 无限循环

sql-server 如何处理无限循环?它是检测到它还是杀死服务器。

例如:

0 投票
4 回答
806 浏览

language-agnostic - 循环中的技术非终止条件

我们大多数人都知道循环不应该有非终止条件。例如,这个 C# 循环有一个非终止条件:i 的任何偶数值。这是一个明显的逻辑错误。

有时存在极不可能的极端情况,但在技术上构成非退出条件(堆栈溢出和内存不足错误除外)。假设您有一个函数可以计算流中连续零的数量:

现在,假设你喂它这个东西:

或者更现实地说,可能是从外部硬件返回数据的流,在某些情况下可能会返回许多零(例如坐在您办公桌上的游戏控制器)。无论哪种方式,我们都有一个无限循环。这种特殊的非终止条件很突出,但有时它们不会

一个完全真实的例子,就像我正在编写的应用程序一样。无穷无尽的零流将被反序列化为无限的“空”对象(直到集合类或 GC 抛出异常,因为我已经超过了 20 亿个项目)。但这将是一个完全出乎意料的情况(考虑到我的数据源)。

绝对没有非终止条件有多重要?这对“稳健性”有多大影响?如果它们只是“理论上”非终止(如果异常表示隐式终止条件是否可以),这是否重要?应用程序是否商业重要吗?如果是公开发行的?有问题的代码是否无法通过公共接口/API 访问是否重要?

编辑: 我最关心的一个问题是不可预见的逻辑错误,它可以创建非终止条件。通常,如果您确保没有非终止条件,您可以更优雅地识别或处理这些逻辑错误,但值得吗?什么时候?这是一个与信任正交的问题。

0 投票
1 回答
698 浏览

swing - while 循环忽略事件监听器

因此,当我运行此代码以尝试更改背景时,GUI 崩溃并陷入无限循环,而忽略了事件侦听器。这是代码:

而不是退出终止程序或事件更改背景的循环,它只是显示面板并且什么都不做,我必须强制它退出。我该怎么办?

0 投票
2 回答
2188 浏览

jquery - 回调中的 jQuery .remove() 调用触发无限循环

虽然我的问题本身似乎已经解决,但我希望有人能解释一下为什么会这样......

下面是同一函数的两个快照,它们的作用是删除包含用户反馈消息的 div。它设置为使用可选超时,如果指定超时,它会使用 setTimeout() 调用自身,然后删除 div。

该函数的两个版本之间的唯一区别是调用this.remove()的位置 - 在问题版本中,我首先使用blackbirdjs向日志发送消息,然后调用 this.remove() - 在此执行后日志被淹没与“删除反馈 div...”的无休止的日志消息一样快,浏览器可以将它们注入。

然而,在工作版本中,我只是颠倒了顺序,一切都正常执行,一切都很好......

我很困惑,我认为这种情况下的顺序是微不足道的,但显然不是。谁能解释为什么会发生这种情况?这是一个 jQuery 错误还是 blackbird 的问题或 JavaScript 的某种奇怪的怪癖?

注意:
我使用对 confirm() 的调用取得了一些喜忧参半的成功 - 如果它返回 false 我告诉它返回并且这停止了它 - 但是,只是在 remove 调用之后添加 return 没有效果。

有趣的是,这两个版本在 IE8 中似乎都可以正常工作——所以这可能是 firefox/gecko 问题?

问题代码:

工作代码: