如何在 for 循环中暂停
Posted
技术标签:
【中文标题】如何在 for 循环中暂停【英文标题】:How can I pause inside a for loop 【发布时间】:2020-04-15 06:26:57 【问题描述】:好吧,我可以暂停一下,问题是我所有的“暂停”都在累积,而不是按顺序完成。我尝试了很多时钟的东西,睡觉,..每次都得到相同的结果。我在这里错过了什么吗?我只是想通过视觉反馈帮助我编程,它不会留在代码中,所以任何东西,即使是肮脏的,都是受欢迎的!
void Dockable::resize_cells()
for (int i = 0; i < cells.size(); i++)
for (int j = 0; j < cells[i].size(); j++)
if (cells[i][j] != layout)
if (cells[i][j]->is.docked)
int found_col = 0;
bool found = false;
int pos = 0;
for (int k = 0; k < cells.size(); k++)
int col = 0;
for (int l = 0; l < cells[k].size(); l++)
if (!found)
if (cells[i][j] == cells[k][l])
found = true;
pos = col;
if (!(l - 1 < 0) &&
cells[k][l] != cells[k][l - 1])
col++;
else
col++;
if (found)
if (col > found_col)
found_col = col;
cells[i][j]->x_size(layout->x_size() / found_col);
cells[i][j]->x((layout->x_size() / found_col) * pos);
cells[i][j]->refresh_shape_apply();
wait();
void Dockable::wait()
clock_t counter;
clock_t target;
counter = clock();
target = clock() + 100;
while (counter < target)
counter = clock();
std::cout << counter << std::endl;
refresh_shape_apply,应用转换,因为它在等待之前执行,我希望它会起作用。
【问题讨论】:
积累是什么意思?你能写出你想要什么的描述吗?像,做一些事情。等待。做东西。等待。做东西。等待。做事。或做事。做东西。等待。做东西。做事。 好吧,Dockable 是我的菜,但我使用 sfml,所以是的,我想我发现了我的问题,在等待期间渲染循环可能也冻结了 大多数 GUI(实际上我所知道的)都是由某种事件循环驱动的。在这种情况下,应用程序的任何(重新)操作都应尽快返回到此事件循环(或在单独的线程中运行)。在代码中等待会阻止更新屏幕输出,因为更新也是通过事件循环调用来执行的。 解决方案是打破循环并使循环迭代变量成为某种“全局”状态。必须重新组织代码,以便完成一些迭代,直到例如已经消耗了一些时间,然后离开循环更新输出,然后重新进入循环进一步计算。 另一种解决方案可能是将事件循环处理的嵌套调用嵌入其中一个内部循环中。这确实适用于 Qt 和 GTK+,也可能适用于其他 GUI。但是,它可能不适用于您的情况。除此之外,(恕我直言)它不像上述方法那样简洁。 【参考方案1】:你可以使用这个代码
system("pause");
这有助于暂停代码,直到您按任意字母继续。
【讨论】:
提问者的问题不在于让程序休眠、等待、暂停或你有什么。他们已经弄清楚了。它使 GUI 以延时步骤显示结果。如果你暂停整个程序,你也会暂停输出的渲染,这不会给提问者他们想要的东西。 旁注:这是一种暂停程序的残酷方式。它实际上启动了另一个等待按键并阻止原始进程直到程序退出的程序。以上是关于如何在 for 循环中暂停的主要内容,如果未能解决你的问题,请参考以下文章
For 循环:如何在 100 次循环后暂停 x 秒? [复制]
在 Shiny 应用程序中,如何暂停 for 循环以获取用户输入,然后在单击按钮后继续?