我一直在学习斯坦福大学的 CS106B 类(class),在完成 Boggle 作业时,我注意到 Windows 上的 Sleep() 函数的行为与 Pause() 函数不同。出于测试目的,我简单地设置了电路板并使用提供的 gboggle.h 文件突出显示 Boggle 立方体,然后删除突出显示。以下是相关代码:

for(int row = 0; row < board.numRows(); row++)
{
    for(int col = 0; col < board.numCols(); col++)
    {
        HighlightCube(row, col, true);
    }
}

Pause(0.5);

for(int row = 0; row < board.numRows(); row++)
{
    for(int col = 0; col < board.numCols(); col++)
    {
        HighlightCube(row, col, false);
    }
}

如果我使用 Pause(),立方体高亮显示,然后恢复正常。如果我使用 Sleep() 或 Wait(),则立方体永远不会突出显示,并且程序中的延迟甚至发生在绘制板之前而不是在 for 循环之间。相关的 Wait() 函数:
void wait ( int seconds )
{
  clock_t endwait;
  endwait = clock () + seconds * CLOCKS_PER_SEC ;
  while (clock() < endwait) {}
}

取自 here 。我在 Windows XP 上使用 Visual Studio 2005。

这些功能之间的什么区别导致它们以这种方式行事?

编辑:我知道 Sleep 和 wait 需要整数。我已经使用整数测试它们并看到延迟,但它发生在写入平方之前。对不起,我之前不清楚。

Edit2:查看我使用的其他一些库后,我发现 Pause 实际上是图形库的一部分,它只是暂停图形缓冲区。

最佳答案

我以前从未见过暂停命令;也许你可以为它提供一些代码?

Windows 应用程序基于消息泵的想法,而绘画的优先级较低。

如果您在消息泵线程中休眠或等待,那么您将阻止它进一步处理消息,例如绘制屏幕。

您需要屈服于消息泵,以便它可以完成它的工作。

您可能会查看 Wait for multiple 的用法并运行第二个消息泵。 (猜测这是Pause的主体)。

关于c++ - C++ 中的 Pause()、Sleep() 和 Wait() 有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6005255/

10-13 04:03