在 Windows 上,我有一个在 Unix 上从未遇到过的问题。这就是如何让线程休眠不到一毫秒。在 Unix 上,您通常有多种选择(sleep、usleep 和 nanosleep)来满足您的需求。然而,在 Windows 上,只有毫秒粒度的 _睡眠_。
在 Unix 上,我可以使用 select
系统调用来创建微秒睡眠,这非常简单:
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 上达到同样的效果?
原文由 Jorge Ferreira 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Windows 上,使用
select
会强制您在应用程序中包含必须像这样初始化的 Winsock 库:然后 select 不允许你在没有任何套接字的情况下被调用,所以你必须做更多的事情来创建一个 microsleep 方法:
所有这些创建的 usleep 方法在成功时返回零,在错误时返回非零。