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

| 我正在用C ++写一个多平台内部库,该库最终将在Windows,Linux,MacOS和ARM平台上运行,并且需要一次睡眠几毫秒的方法。 我有一个在ARM平台上执行此操作的准确方法,但是我不确定如何在其他平台上执行此操作。 在大多数平台上,是否都可以以毫秒级的分辨率入睡?或者,对于每个平台,我是否都需要特殊情况?     
已邀请:
对于Linux和Mac OS X,您可以使用
usleep
usleep(350 * 1000);
对于Windows,您可以使用
Sleep
Sleep(350);
编辑:
usleep()
睡眠微秒,而不是毫秒,因此需要调整。     
boost::this_thread::sleep()
    
usleep
理论上提供微秒级的分辨率,但取决于平台。 在Windows上似乎已经过时了,因此您应该在那儿使用QueryPerformanceCounter(或编写兼容性层)。 附言:取决于ѭ7的构建程序通常是灾难的一种方式。通常,程序员真正想要的是等待异步事件的发生。在这种情况下,您应该查看平台上可用的可等待对象,例如信号量或互斥量,甚至是良好的文件描述符。     
对于计时器,您可以同步或异步使用boost asio :: deadline_timer。 您还可以考虑使用boost :: posix_time在秒,毫秒,微秒和纳秒之间调整计时器精度。     
Windows sleep()确实提供了毫秒级的精度,但没有达到毫秒级的精度。始终存在抖动,尤其是在负载较重的系统上抖动较小时。其他非实时操作系统只会出现类似的问题。即使调用sleep()的线程的优先级很高,驱动程序中断也可能随时引入额外的延迟。 Rgds, 马丁     

要回复问题请先登录注册