C ++中的Pause(),Sleep()和Wait()之间有什么区别?

我一直在研究斯坦福大学的CS106B课程,在完成Boggle任务时,我注意到Windows上的Sleep()函数与Pause()函数有所不同。 出于testing目的,我只是简单地设置了电路板,并使用提供的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) {} } 

从这里采取。 我在Windows XP上使用Visual Studio 2005。

这些function之间的区别是什么导致他们这样做?

编辑:我知道睡眠和等待需要整数。 我已经使用整数testing了它们,看到了延迟,但是在正方形写入之前发生了。 对不起,我以前不清楚。

编辑2:通过其他我使用的库后,我发现,暂停,其实是graphics库的一部分,简单地暂停graphics缓冲区。

我从来没有见过暂停命令; 也许你可以提供一些代码呢?

Windows应用程序使用消息泵的概念,而绘画是低优先级的。

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

你需要屈服于消息泵,所以它可以做到这一点。

您可能会考虑使用等待多个并运行第二个消息泵。 (猜测这是暂停的主体)。

睡眠需要一个整数毫秒,你给它0.5,所以你等待0毫秒。 你的等待功能也需要整合,所以它也有同样的问题。

您的等待功能也被阻止。 只要你在等待,你的应用程序很忙,使用CPU,等待。 而睡眠窗口函数挂起当前线程,这意味着你的应用程序真的什么都不做(不使用任何CPU资源),直到时间结束。

编辑:我不知道什么暂停,因为它不是一个WinAPI函数。

编辑:它可能是,首先看到HighlightCube的结果,当应用程序获取回到它的事件循环,然后这些立方体绘制。 这样,你只要突出显示它们,然后等待,然后取消突出显示它们。 然后你的函数返回,应用程序终于得到它们。 这是非常明显的,睡眠(也是你的等待)只是阻止应用程序处理任何事件(包括窗口绘画事件)。 我想暂停通过检查事件循环来防止这种情况。 其实这是格雷格Domjan已经写了。

因为wait需要一个int参数,用0.5调用它(就像你用于Pause例子)将导致0.5被截断为0,所以你不会得到任何延迟。