在 Windows 上,我遇到了一个在 Unix 上从未遇到过的问题。这就是如何让线程休眠不到一毫秒。在 Unix 上,您通常有多种选择(sleep、usleep 和 nanosleep)来满足您的需求。然而,在 Windows 上,只有毫秒粒度的 Sleep。
在 Unix 上,我可以使用 select
系统调用来创建非常简单的微秒 sleep :
int usleep(long usec)
{
struct timeval tv;
tv.tv_sec = usec/1000000L;
tv.tv_usec = usec%1000000L;
return select(0, 0, 0, 0, &tv);
}
如何在 Windows 上实现同样的效果?
最佳答案
这表明对 sleep 功能的理解有误。您传递的参数是 sleep 的最少时间。不能保证线程会在指定的时间后唤醒。事实上,线程根本不会“唤醒”,而是由 OS 调度程序选择执行。调度程序可能会选择等待比请求的 sleep 持续时间长得多的时间来激活线程,尤其是当另一个线程此时仍处于事件状态时。
关于c++ - 如何在 Windows 上使线程 sleep 时间少于一毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/85122/