【问题标题】:Breaking out from generating windows in infinite loop在无限循环中从生成窗口中脱颖而出
【发布时间】:2016-03-11 12:35:26
【问题描述】:

在我的程序中,我犯了一个明显的错字

for(int i = 0; i<mNoOfCores; i+3)

而不是

for(int i = 0; i<mNoOfCores; i++)

不幸的是,在循环中我正在生成 QT5 窗口。所以我的 Ubuntu 系统被绝对拒绝了,只能在上电复位后重启。 (鼠标反应灵敏,键盘可能也反应灵敏。)有更好的方法吗?或者,通过这种方式我可以拒绝应用程序的操作系统?

【问题讨论】:

  • 我不太清楚你在问什么。更好的方法当然是避免无限循环(尤其是当您在该循环内创建窗口时)。

标签: c++ infinite-loop


【解决方案1】:

编译器无法提前通知您有关无限循环的信息。这在很多地方都有讨论,hereherehere

您可以做的是使用简单的“双重检查”来防止自己挂起操作系统。示例:

int totalNoWindowsCreated = 0; // keep track of windows created OK
for(int i = 0; i<mNoOfCores; i+3)
{
  // Create window  
  totalNoWindowsCreated++; // If created OK
  assert(("Bug !", totalNoWindowsCreated <= mNoOfCores)); // Check
}

更新:当然,您可以在断言条件下出错,在这种情况下,只需休息一下,喝杯咖啡:)。

【讨论】:

  • 断言不应该检查totalNoWindowsCreated &lt; mNoOfCores吗?
  • @AlfieJ.Palmer 如此之快,双重检查可能会变成双重错误;)
  • 抱歉造成误会。我不想以编程方式保护自己。我想知道是否存在一些热键组合,可以杀死那个野程序。
  • Ctrl + Alt + Esc,详情见本问答:askubuntu.com/questions/104903/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多