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;
}
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – sleep睡眠函数总结
原文链接:https://www.stubbornhuang.com/2360/
发布于:2022年09月20日 10:18:14
修改于:2023年06月21日 18:03:11
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52