我知道POSIX休眠(x)函数使程序休眠x秒。C++中是否有一个函数可以让程序休眠x毫秒?
当前回答
纳米睡眠是比usleep更好的选择,它对中断更有弹性。
其他回答
作为POSIX系统的Win32替代品:
void Sleep(unsigned int milliseconds) {
usleep(milliseconds * 1000);
}
while (1) {
printf(".");
Sleep((unsigned int)(1000.0f/20.0f)); // 20 fps
}
选择调用是一种提高精度的方法(睡眠时间可以以纳秒为单位)。
在具有选择功能的平台(POSIX、Linux和Windows)上,您可以执行以下操作:
void sleep(unsigned long msec) {
timeval delay = {msec / 1000, msec % 1000 * 1000};
int rc = ::select(0, NULL, NULL, NULL, &delay);
if(-1 == rc) {
// Handle signals by continuing to sleep or return immediately.
}
}
然而,现在有更好的选择。
一个答案的优雅解决方案,有点修改。。如果没有更好的功能可用,可以很容易地添加select()用法。只需生成使用select()等的函数。。
代码:
#include <iostream>
/*
Prepare defines for millisecond sleep function that is cross-platform
*/
#ifdef _WIN32
# include <Windows.h>
# define sleep_function_name Sleep
# define sleep_time_multiplier_for_ms 1
#else
# include <unistd.h>
# define sleep_function_name usleep
# define sleep_time_multiplier_for_ms 1000
#endif
/* Cross platform millisecond sleep */
void cross_platform_sleep_ms(unsigned long int time_to_sleep_in_ms)
{
sleep_function_name ( sleep_time_multiplier_for_ms * time_to_sleep_in_ms );
}
#include <chrono>
#include <thread>
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // sleep for 1 second
记住导入两个标头。
推荐文章
- 在tmux中保持窗口名称固定
- 是否需要手动关闭ifstream?
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 为什么函数指针定义可以使用任意数量的&号或星号* ?
- 为什么我必须通过this指针访问模板基类成员?
- 什么是可重入函数?
- 什么是栈展开?
- 我如何读整个文件到性病::字符串在c++ ?
- 如何在c++中使用枚举
- 为什么512x512矩阵的转置比513x513矩阵的转置慢得多?
- 通过引用传递数组
- 为什么非const引用不能绑定到临时对象?
- sizeof(某个指针)总是等于4吗?
- 在c++中使用数组或std::vector,性能差距是什么?