C++:如何睡一纳秒?

SmR*_*Guy 4 c++ windows sleep

可能重复:
睡眠时间小于一毫秒

如何使程序睡眠纳秒?我搜索了互联网,我发现了几种睡眠方式,但是:
windows.h的Sleep()睡眠时间只有几毫秒.
ctimenanosleep()是仅适用于POSIX系统,而我使用的是Windows.
我也试过这个:

int usleep(long usec)
{
    struct timeval tv;
    tv.tv_sec = usec/1000000L;
    tv.tv_usec = usec%1000000L;
    return select(0, 0, 0, 0, &tv);
};
Run Code Online (Sandbox Code Playgroud)

但Code :: Blocks说:

obj\Release\main.o:main.cpp|| undefined reference to `select@20'|
Run Code Online (Sandbox Code Playgroud)

我尝试了很多东西,但一切都失败了.我该怎么办?

inf*_*inf 12

使用C++ 11

#include <chrono>
#include <thread>
...
std::this_thread::sleep_for(std::chrono::nanoseconds(1));
Run Code Online (Sandbox Code Playgroud)

请注意,实现可能会比给定时段睡眠时间更长.

  • 为什么要投票? (2认同)
  • @ShitalShah 你有什么参考资料吗?这是标准问题还是实现问题? (2认同)

Mar*_*tus 4

您还应该注意到,有一个调度程序,它可能不允许短于时间片的睡眠(大约 4 毫秒 - 10 毫秒,具体取决于您的 Windows 和机器)。睡眠时间少于这个时间是不可能的

以下是关于该问题窗口的一些(相当古老的)研究

本文建议使用 Win32timeBeginPeriod()来实现这一目标。