• 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

C++ – sleep睡眠函数总结

C++ 发布于2022-09-20 阅读 8,467次 0次评论 0次点赞 本文共2580个字,阅读需要7分钟。

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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
C++ - 在某一天某个时间点定时执行任务,比如2022年9月19日晚上9点准点执行发送邮件函数
C++
下一篇
ThreeJS - 摄像机绕X轴、绕Y轴、绕Z轴旋转指定角度
ThreeJS
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号