【发布时间】:2019-07-01 21:50:41
【问题描述】:
在 Windows 中:
for (int i = 0; i < 100; i++)
{
Sleep(100); // Sleep 100 ms in Windows
printf(".[%d] ", i);
}
结果是在 Windows 中每 100 毫秒出现一个带括号的数字。
在 Linux 中:
for (int i = 0; i < 100; i++)
{
usleep(100000); // Sleep 100 ms in Linux
printf(".[%d] ", i);
}
结果是在 Linux 中每 100 毫秒出现一个 GROUP ob 括号内的数字。它正在运行循环,只是在睡眠完成之前不打印数字。 ????
【问题讨论】:
-
在 Windows 上尝试来自 here 的 sleep 命令。也许您在 Windows 中的 sleep 命令不会将 100 解释为毫秒,而是解释为秒。
-
我会说 Linux 上的 printf 正在缓冲,所以它只会在缓冲区填满后打印,您可以通过调用 fflush(stdout); 进行测试在 printf 之后您还可以使用 setbuf(stdout, NULL); 预先禁用缓冲;
-
我猜你需要刷新 -
fflush(stdout);(顺便说一下,std::this_thread::sleep_for(std::chrono::milliseconds{100});应该更便携。)
标签: c++ linux windows sleep usleep