本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – sleep睡眠函数总结
原文链接:https://www.stubbornhuang.com/2360/
发布于:2022年09月20日 10:18:14
修改于:2022年09月20日 10:22:40
1 操作系统自带的Sleep函数
1.1 Windows系统
在Windows系统中可以使用系统自带的Sleep()
函数,需要包含Windows.h
头文件
#include <iostream>
#include <windows.h>
int main()
{
std::cout << "睡眠一秒" << std::endl;
Sleep(1000); // 系统睡眠函数
std::cout << "一秒时间已过" << std::endl;
return 0;
}
1.2 Unix环境的操作系统
1.2.1 sleep()函数
同样的在Unix环境下的操作系统也有系统自带的睡眠函数sleep()
,同样休眠指定秒数,需要包含<unistd.h>
头文件。
#include <iostream>
#include <unistd.h>
int main()
{
std::cout << "Sleeping for 1 second.." << std::endl;
sleep(1); // sleep for 1 second
std::cout << "1 second elapsed.." << std::endl;
return 0;
}
1.2.2 usleep()函数
在<unistd.h>
中还提供了睡眠微秒的函数usleep()
。
#include <iostream>
#include <unistd.h>
int main()
{
std::cout << "Sleeping for 1 second.." << std::endl;
usleep(1000000); // sleep for 1 second
std::cout << "1 second elapsed.." << std::endl;
return 0;
}
1.2.3 nanosleep
在<unistd.h>
中还提供了睡眠纳秒的函数nanosleep()
。
#include <iostream>
#include <unistd.h>
int main()
{
std::cout << "Sleeping for 1 second.." << std::endl;
nanosleep(1000000); // sleep for 1 second
std::cout << "1 second elapsed.." << std::endl;
return 0;
}
2 C++ std标准库中的Sleep函数
2.1 std::this_thread::sleep_for
从C++11开始,我们可以使用std::this_thread::sleep_for
函数在指定时间内睡眠当前线程。可是使用以下时间单位:
- std::chrono::hours - 小时
- std::chrono::minutes - 分钟
- std::chrono::seconds - 秒
- std::chrono::milliseconds - 毫秒
- std::chrono::microseconds - 微秒
- std::chrono::nanoseconds - 纳秒
而在C++20的标准中引入了更多的时间单位
- std::chrono::years - 年
- std::chrono::months - 月
- std::chrono::weeks - 周
- std::chrono::days - 日
在C++11中使用std::this_thread::sleep_for函数
#include <iostream>
#include <chrono>
#include <thread>
int main()
{
std::cout << "睡眠一秒" << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // 系统睡眠函数
std::cout << "一秒时间已过" << std::endl;
return 0;
}
在C++14中使用std::this_thread::sleep_for函数
在C++14中我们还可以通过文字后缀,如ns、us、ms、s、h等进一步简化代码,但是需要使用到std::chrono_literals
命名空间。
#include <iostream>
#include <chrono>
#include <thread>
int main()
{
std::cout << "睡眠一秒" << std::endl;
using namespace std::chrono_literals; // 系统睡眠函数
std::this_thread::sleep_for(1s);
std::cout << "一秒时间已过" << std::endl;
return 0;
}
2.2 std::this_thread::sleep_until
C++11除了提供std::this_thread::sleep_for
睡眠固定时间之外,还提供了std::this_thread::sleep_until
函数对程序进行睡眠,直到到某一个时间才唤醒程序。
在C++11中使用std::this_thread::sleep_until函数
下面的示例程序显示了C++11标准如何使用std::this_thread::sleep_until
函数睡眠1秒钟。
#include <iostream>
#include <chrono>
#include <thread>
int main()
{
std::cout << "睡眠一秒" << std::endl;
std::this_thread::sleep_until(std::chrono::system_clock::now() + std::chrono::seconds(1));
std::cout << "一秒时间已过" << std::endl;
return 0;
}
在C++14中使用std::this_thread::sleep_until函数
同样的,C++14之后,我们也可以使用文字后缀指定时间单位
#include <iostream>
#include <chrono>
#include <thread>
int main()
{
std::cout << "睡眠一秒" << std::endl;
using namespace std::chrono_literals;
std::this_thread::sleep_until(std::chrono::system_clock::now() + 1s);
std::cout << "一秒时间已过" << std::endl;
return 0;
}
当前分类随机文章推荐
- C++STL容器 - std::vector构造方式与分配值方式总结 阅读843次,点赞0次
- C++ - 一文搞懂std::future、std::promise、std::packaged_task、std::async的使用和相互区别 阅读335次,点赞0次
- C++ - 使用std::chrono获取当前秒级/毫秒级/微秒级/纳秒级时间戳 阅读3577次,点赞0次
- C++11 - 封装std::thread,增加子线程启动、暂停、唤起、停止功能 阅读4834次,点赞7次
- C++ - 动态链接库dll为什么要使用unsigned char作为byte的内部格式 阅读741次,点赞0次
- C++ - 阿拉伯数字字符串转换为中文读法的中文字符串,支持小数点 阅读1347次,点赞0次
- C++ - 得到字符串中某个字符串出现的个数 阅读4133次,点赞2次
- Centos7 编译C++项目错误解决 : terminate called after throwing an instance of 'std::regex_error' 阅读2592次,点赞1次
- C++11/std::thread - 可作为线程函数的几种方式总结 阅读3682次,点赞1次
- C++ - 将std::vector中的数值拷贝到数组中 阅读2586次,点赞1次
全站随机文章推荐
- 深度学习 - Transformer详细注释 阅读546次,点赞0次
- 资源分享 - Foundations of 3D computer graphics 英文高清PDF下载 阅读1345次,点赞0次
- OpenCV - linux上编译出现undefined reference to `cv::VideoCapture::VideoCapture()'错误 阅读2207次,点赞0次
- OpenVINO - 在Windows系统上配置OpenVINO C++开发环境 阅读21次,点赞0次
- C++ - Windows系统获取桌面路径 阅读225次,点赞0次
- 书籍翻译 – Fundamentals of Computer Graphics, Fourth Edition,第3章 Raster Images中文翻译 阅读2299次,点赞3次
- WordPress - 利用Revolvermaps在首页实时显示访客3D地球 阅读3376次,点赞1次
- Modern OpenGL从零开始 - 从茫茫多的OpenGL第三方库讲起 阅读3563次,点赞1次
- 资源分享 - Game Engine Gems 1英文高清PDF下载 阅读2336次,点赞0次
- 深度学习 - 以一个极简单的中英文翻译Demo彻底理解Transformer 阅读776次,点赞0次
评论
169