首页 > 编程语言 >C++:std::this_thread::sleep_for 和 sleep

C++:std::this_thread::sleep_for 和 sleep

时间:2024-09-01 11:51:31浏览次数:7  
标签:std thread C++ 跨平台 sleep include

        在C++中,std::this_thread::sleep_for和sleep函数都可以用来使当前线程暂停执行一段时间,但它们有一些重要的区别。以下是对这两种方法的详细比较:

std::this_thread::sleep_for

  • 定义:std::this_thread::sleep_for是C++11标准库中的一个函数,用于使当前线程暂停执行一段时间。

  • 头文件:需要包含<thread>和<chrono>头文件。

  • 时间单位:可以使用std::chrono库中的各种时间单位(如秒、毫秒、微秒等)。

  • 类型安全:由于使用了std::chrono库,时间单位是类型安全的,避免了单位混淆的问题。

  • 跨平台:在所有支持C++11及以上标准的编译器和平台上都可以使用。

示例代码

#include <iostream>
#include <thread>
#include <chrono>

int main() {    
    std::cout << "Sleeping for 5 seconds..." << std::endl;                       
    std::this_thread::sleep_for(std::chrono::seconds(5));    
    std::cout << "Awake!" << std::endl;    
    return 0;
}

sleep

  • 定义:sleep是一个POSIX标准的C函数,用于使当前线程暂停执行指定的秒数。

  • 头文件:需要包含<unistd.h>头文件。

  • 时间单位:只能以秒为单位。

  • 跨平台:主要在POSIX兼容系统(如Linux、macOS)上使用,Windows上需要使用Sleep函数(注意大小写不同)。

示例代码
#include <iostream>
#include <unistd.h> // POSIX标准

int main() {    
    std::cout << "Sleeping for 5 seconds..." << std::endl;    
    sleep(5);    
    std::cout << "Awake!" << std::endl;    
    return 0;
}
详细比较
特性头文件时间单位

类型安全

跨平台精度可读性

std::this_thread

::sleep_for

<thread>, <chrono>支持多种时间单位(秒、毫秒、微秒等)

是(C++11及以上标准)高(可以精确到纳秒)高(使用std::chrono库,代码更具可读性)
sleep<unistd.h>仅支持秒否(主要在POSIX系统上使用)否(主要在POSIX系统上使用)低(只能使用秒,代码可读性较差)
选择建议
  • 跨平台开发:如果你的代码需要在多个平台上运行,建议使用std::this_thread::sleep_for,因为它是C++标准库的一部分,具有更好的跨平台支持。

  • 精度要求:如果你需要更高的时间精度(如毫秒或微秒级别),建议使用std::this_thread::sleep_for。

  • 代码可读性:std::this_thread::sleep_for结合std::chrono库使用,代码更具可读性和类型安全性。

标签:std,thread,C++,跨平台,sleep,include
From: https://blog.csdn.net/weixin_53442127/article/details/141781999

相关文章

  • stdio.h及字符串输入输出
    这里只简单介绍常用的C语言常见的输入输出及字符串的输入输出,可以作为常用C语言字符串的速记收藏。#include<stdio.h>scanf //与空格,tab键及换行就阻断缓冲区printf //格式输入输出gets(数组名) //直到遇到换行键停止chararr[n];gets(arr);puts(数组名) //......
  • python并发与并行(五.1) ———— 不要在每次fan-out时都新建一批Thread实例
    我们使用康威生命游戏的例子来解释这个专题。首先我们要实现一个康威生命游戏。这是个经典的有限状态自动机。它的规则很简单:在任意长宽的二维网格中,每个单元格都必须处于ALIVE或EMPTY状态,前者表示这个单元格里有生命存在,后者表示这里没有生物(或者原有生物已经死亡)。时钟每走一格......
  • python并发与并行(五.2) ———— 不要在每次fan-out时都新建一批Thread实例
    想在Python里平行地做I/O,首先要考虑的工具当然是线程。但如果真用线程来表示fan-out模式中的执行路径,你就会发现,这样其实有很多问题。我们用上一篇文章的conwaygame的实现来举例说明。我们用线程来解决game_logic函数由于执行I/O而产生的延迟问题。首先,这些线程之间需要锁定功能对......
  • 详细了解ThreadLocal底层原理及作用
    深入ThreadLocal底层原理一、ThreadLocal的作用二、ThreadLocal的底层原理三、可能存在的问题四、总结一、ThreadLocal的作用ThreadLocal是Java中一个用于实现线程局部变量的类。它的主要作用是在每个线程中创建一个变量的副本,这样每个线程可以独立地访问自己的副本......
  • Android 11 About SleepToken / (Settings)Screen timeout
    AndroidR激活Settings里面的息屏休眠,最前台运行的Activity生命周期->onPause->onStopadbshelldumpsyswindowpolicy//获取PhoneWindowManager的dump信息...bootCompleted=truescreenState=SCREEN_STATE_ON/SCREEN_STATE_OFFinteractiveState=INTERACTIVE_STATE_AW......
  • day07(IO进程)线程 Thread
    目录一.什么是线程1. 概念2. 进程和线程区别3.线程资源二.函数接口1.创建线程:pthread_create2. 退出线程:pthread_exit3.回收线程资源 pthread_join练习:输入输出,quit结束三.同步1.概念2.同步机制3. 函数接口练习:用信号量实现输入输出quit结束......
  • 线程池ThreadPool, C++
    一、为什么要有线程池?线程池是一种用于管理和复用线程的机制。它可以提高程序的性能和效率,特别是在处理大量并发任务时。线程池中包含一定数量的线程,这些线程可以重复执行多个任务。当有任务需要执行时,可以将任务提交给线程池,线程池会选择一个可用的线程来执行任务。任务执行完......
  • Linux | Ubuntu 16.04.4 通过docker安装单机FastDFS
    Ubuntu16.04.4通过docker安装单机fastdfs前言很久没有写技术播客了,这是一件很不应该的事情,做完了事情应该有沉淀的。我先说一点前情提要,公司的fastdfs突然就挂了,做过的操作就是日志文件太大了,所以把日志文件给删了,理论上这个动作应该不影响程序运行才对。然后tracker怎么都......
  • TransmittableThreadLocal实现父子线程之间数据传递
    1、引入依赖<dependency><groupId>com.alibaba</groupId><artifactId>transmittable-thread-local</artifactId><version>2.14.5</version></dependency>2、传递String参数publicclassTransmittableThreadLocalDe......
  • 线程:线程创建pthread_create,线程间的同步与互斥
    线程的创建 线程的创建是通过调用pthread_create函数来实现的。该函数的原型如下:intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg);参数说明:thread:指向pthread_t类型的指针,用于存储新线程的ID。attr:指向......