在C++中的Sleep操作,平台:Windows。

8
我希望以毫秒为单位执行上述操作。我应该选择哪个库和函数调用?谢谢。

Sleep 函数? - Praetorian
你确定睡觉是最好的解决方案吗?通常情况下并不是。 - David Heffernan
如果您需要睡眠几毫秒,请注意sleep()函数的分辨率可能为10毫秒或更高。 - Martin Beckett
4个回答

6

如果您使用的是Visual Studio 2010(或其他支持C++0x的编译器),则请使用以下代码:

#include <thread>
#include <chrono>

std::this_thread::sleep();

// or
std::this_thread::sleep_for(std::chrono::milliseconds(10));

使用旧版本编译器时,您可以使用相关的Boost库来获得相同的便利。

不用说,这里的主要好处是可移植性和将延迟参数转换为“人类”单位的简易性。


2
@OldPeculier 这意味着这现在是普遍适用的答案,多年以后 :) - sehe

5
你可以使用来自 Win32 API 的 Sleep 函数。

LOL。同一个谷歌链接,但你比我快了45秒。 - ksming

2
Windows任务计划程序的精度远高于1毫秒(通常为20毫秒)。您可以使用性能计数器来测量实际在“Sleep()”函数中花费的时间来测试这一点。(使用“QueryPerformanceFrequency()”和“QueryPerformanceCounter()”可以测量纳秒级的时间)。请注意,“Sleep(0)”使线程睡眠的时间尽可能短。
但是,您可以通过使用{{link1:timeBeginPeriod()}}并传递1毫秒的周期来更改此行为。现在,“Sleep(0)”应该返回得更快。
请注意,此函数调用是为了以更高的准确度播放多媒体流。我从未遇到过使用此方法的问题,但需要如此快的周期的情况相当罕见。根据您想要实现的目标,可能有更好的方法来获得所需的准确度,而无需采用此“黑客”方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接