有几种可能做无限循环,这里有一些我会select: for(;;) {} while(1) {} / while(true) {} do {} while(1) / do {} while(true) 有一种应该select的forms吗? 现代编译器会在中间语句和最后一个语句之间做出区别,还是会意识到这是一个无限循环,完全跳过了检查部分? 编辑:正如前面提到的,我忘记了goto ,但这是因为我根本不喜欢它作为命令。 Edit2:我对从kernel.org取得的最新版本做了一些grep。 我似乎没有太多的改变(至less在内核内)
除了语法和可读性之外, while(true)和for(;;)之间的PHP有什么区别吗? 编辑:我不会认为这是重复的 – 我想知道特定于PHP的答案。 就引擎而言,有没有真正的区别? 他们编译到相同的东西? 他们有相同的performance吗? 编辑2:我也不会考虑相关的性能和相关的OpCodes是基于意见。 在可读性方面有意见的范围,但这显然不是问题。
写一个无限循环很简单: while(true){ //add whatever break condition here } 但是这会损害CPU的性能。 这个执行线程将尽可能地从CPU的力量。 降低对CPU的影响最好的办法是什么? 添加一些Thread.Sleep(n)应该可以做到这一点,但是为Sleep()方法设置一个很高的超时值可能表示对操作系统没有反应的应用程序。 假设我需要在控制台应用程序中每分钟执行一次任务。 我需要保持Main()在“无限循环”中运行,而计时器将触发将执行此任务的事件。 我想保持Main()对CPU的影响最小。 你build议什么方法。 Sleep()可以,但是正如我已经提到的,这可能表示对操作系统没有响应的线程。 后期编辑: 我想更好地解释我在找什么: 我需要一个控制台应用程序不Windows服务。 控制台应用程序可以在Compact Framework上模拟Windows Mobile 6.x系统上的Windows服务。 只要Windows Mobile设备正在运行,我需要一种方法来保持应用程序的活跃。 我们都知道,只要静态Main()函数运行,控制台应用程序就会运行,所以我需要一种防止Main()函数退出的方法。 在特殊情况下(如:更新应用程序),我需要请求应用程序停止,所以我需要无限循环和testing一些退出条件。 例如,这就是为什么Console.ReadLine()对我没有用处。 没有退出条件检查。 关于上面,我仍然希望Main()函数尽可能的资源友好。 辅助检查退出条件的function的指纹。
我有一个EditText字段,上面有一个Customer Text Watcher。 在一段代码中,我需要改变EditText中的值,我使用.setText("whatever") 。 问题是一旦我做了这个改变afterTextChanged方法得到调用创build了一个无限循环。 如何在不触发afterTextChanged的情况下更改文本? 我需要在afterTextChanged方法中的文本,所以不build议删除TextWatcher 。
当你在Chrome中的jsfiddle中无限循环时,你唯一的select就是closures这个选项卡。 当然,这意味着你在当前窗口中失去了所有的工作! 有没有简单的方法来阻止无限执行的脚本? 我有开发工具打开,因为我正在做一些debugging。 我可以暂停脚本,并通过循环。 我找不到任何地方停止脚本。 我无法修改脚本或variables来停止无限循环(因为脚本执行发生在独立域上的iframe中,因此不允许使用JavaScript修改iframe中的数据,并在控制台中生成一个Exception)。 这一切都开始,因为我决定从我的循环交换方向 for (var c = 0; c <= 11; c++) 至 for (var c = 12; c > 0; c++) 但正如你所看到的,我忘了把它从c++改为c– 。 有任何想法吗?? 我仍然有选项卡打开,我希望得到它没有closures标签:-)
TL; TR 当我提出这个问题时,我认为StackOverflowException是一种防止应用程序无限运行的机制。 这不是真的。 StackOverflowException未被检测到。 当堆栈没有分配更多内存的能力时抛出。 [原始问题:] 这是一个普遍的问题,每种编程语言可能有不同的答案。 我不确定C#以外的语言如何处理堆栈溢出。 我今天遇到exception,并不断思考如何检测到StackOverflowException 。 我相信这是不可能说,如果堆栈是1000电话深,然后抛出exception。 因为也许在某些情况下,正确的逻辑将是那么深。 在我的程序中检测无限循环的逻辑是什么? StackOverflowException类: https://msdn.microsoft.com/de-de/library/system.stackoverflowexception%28v=vs.110%29.aspx 在StackOverflowException类文档中提到的交叉引用: https://msdn.microsoft.com/de-de/library/system.reflection.emit.opcodes.localloc(v=vs.110).aspx 我刚刚添加了stack-overflow标签到这个问题,说明说,当调用堆栈消耗太多的内存时,它正在被抛出。 这是否意味着调用堆栈是我的程序的当前执行位置的某种path,如果它不能存储更多的path信息 ,那么抛出exception?
我的一个同事向我提出了一个关于这个方法的问题,导致了一个无限循环。 实际的代码有点太过牵扯到这里,但基本上这个问题归结为: private IEnumerable<int> GoNuts(IEnumerable<int> items) { items = items.Select(item => items.First(i => i == item)); return items; } 这应该 (你会认为)是一个非常低效的方式来创build一个列表的副本。 我把它叫做: var foo = GoNuts(new[]{1,2,3,4,5,6}); 结果是一个无限循环。 奇怪。 我认为修改参数在风格上是一件坏事,所以我稍微改变了代码: var foo = items.Select(item => items.First(i => i == item)); return foo; 这工作。 就是这个程序完成了, 没有例外。 更多的实验表明,这也是有效的: items = items.Select(item => items.First(i => i == item)).ToList(); return […]
我想知道为什么下面的代码允许在Java中,没有得到编译错误? 在我看来,这个代码通过不返回任何String打破方法签名。 有人能解释我在这里错过了什么吗? public class Loop { private String withoutReturnStatement() { while(true) {} } public static void main(String[] a) { new Loop().withoutReturnStatement(); } }
回到我的C / C ++日子,编写一个“无限循环” while (true) 感觉更自然,而且对我来说似乎更明显 for (;;) 在二十世纪八十年代后期和后来的最佳实践讨论中,与PC-lint的遭遇使我忽略了这种习惯。 我已经编写了循环使用for控制语句。 今天,这是第一次,也许我第一次需要一个C#开发者的无限循环,我面临着同样的情况。 其中一个是正确的,另一个不是?
有一个直接的发生器expression式,可以产生无限的元素? 这是一个纯粹的理论问题。 这里不需要“实际”的答案:) 例如,制作一个有限的发生器很容易: my_gen = (0 for i in xrange(42)) 然而,为了创造一个无限的我需要“污染”我的命名空间与一个虚假的function: def _my_gen(): while True: yield 0 my_gen = _my_gen() 在单独的文件中执行操作并稍后import不计算在内。 我也知道itertools.repeat正是这样做的。 我很好奇,如果没有一个单线的解决scheme。