在C ++跨平台中延迟毫秒

时间:2011-05-26 06:41:10

标签: c++ cross-platform sleep

我正在用C ++编写一个多平台内部库,最终可以在Windows,Linux,MacOS和ARM平台上运行,并且需要一种方法一次睡眠几毫秒。

我在ARM平台上有一个准确的方法,但我不知道如何在其他平台上执行此操作。

在大多数平台上有没有办法以毫秒级分辨率睡眠,或者每个平台都需要特殊情况吗?

5 个答案:

答案 0 :(得分:7)

对于Linux和Mac OS X,您可以使用usleep

usleep(350 * 1000);

对于Windows,您可以使用Sleep

Sleep(350);

编辑:usleep()睡眠时间为微秒,而不是毫秒,因此需要调整。

答案 1 :(得分:7)

答案 2 :(得分:2)

usleep理论上提供微秒分辨率,但它取决于平台。

在Windows上似乎已经过时了,所以你应该在那里使用QueryPerformanceCounter(或编写你的兼容层)。

P.S。:根据sleep构建程序通常是一种灾难。通常,程序员真正想要的是等待某些事件异步发生。在这种情况下,您应该查看平台上可用的等待对象,如信号量或互斥量,甚至是好的文件描述符。

答案 3 :(得分:1)

对于计时器,您可以同步或异步使用boost asio::deadline_timer。 您还可以查看boost::posix_time在秒,毫秒,微秒和纳秒之间进行定时器精度调整。

答案 4 :(得分:1)

Windows sleep()确实提供毫秒精度,但精确度不到毫秒级。总是存在抖动,特别是在负载很重的系统上具有较小的值。类似的问题只能在其他非实时操作系统中出现。即使调用sleep()的线程的优先级非常高,驱动程序中断也可能在任何时候引入额外的延迟。

RGDS, 马丁