8

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

如何让程序休眠一纳秒?我在网上搜索,我找到了几种睡眠方式,但是:
windows.h的Sleep()睡眠时间仅为毫秒。
ctime'snanosleep()仅适用于 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);
};

但是 Code::Blocks 说:

obj\Release\main.o:main.cpp|| undefined reference to `select@20'|

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

4

2 回答 2

16

使用 C++11

#include <chrono>
#include <thread>
...
std::this_thread::sleep_for(std::chrono::nanoseconds(1));

请注意,实现的睡眠时间可能比给定的时间长。

于 2012-06-16T13:48:27.497 回答
4

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

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

本文建议使用 Win32timeBeginPeriod()来实现。

于 2012-06-16T13:58:56.763 回答