C++时间操作

C++时间操作

文章目录

  • C++时间操作
    • sleep系列
      • sleep
      • nanosleep
      • std::this_thread::sleep_for

sleep系列

sleep

sleep 是在计算机编程中用于暂停当前进程或线程一段时间的函数。让程序暂停执行指定的秒数。

sleep 函数在 <unistd.h> 头文件中定义,其原型如下:

unsigned int sleep(unsigned int seconds);

此函数会让当前进程暂停执行至少 seconds 秒。请注意,sleep 返回的值是剩余未睡眠的秒数,如果睡眠期间收到了信号并被处理,则可能提前结束睡眠。

nanosleep

nanosleep 是一个POSIX标准的系统调用,用于使当前进程或线程暂停执行指定的纳秒(十亿分之一秒)时间。相比于 sleep , nanosleep 提供了更高的时间精度。

在C语言中,nanosleep 函数的原型通常定义在 <time.h> 头文件中:

#include <time.h>int nanosleep(const struct timespec *req, struct timespec *rem);

函数参数:

  • req:指向一个timespec结构体的指针,该结构体中包含了请求的睡眠时间(秒和纳秒)。
  • rem:如果函数由于接收到信号而提前返回,此参数会填充剩余的睡眠时间。如果不需要这个信息,可以传入NULL。

timespec 结构体的定义如下:

struct timespec {time_t tv_sec;     // 秒long   tv_nsec;    // 纳秒
};

示例:

#include <time.h>
#include <stdio.h>int main() {struct timespec req = {0, 100000000}; // 请求休眠1秒(1秒 = 1000000000纳秒)if (nanosleep(&req, NULL) == -1) {perror("nanosleep");}// 程序在此处将继续执行,经过了至少1秒的延迟printf("Sleep finished.\n");return 0;
}

在这个示例中,程序将休眠1秒(100000000纳秒)。如果在休眠期间收到了信号并且没有被阻塞或忽略,nanosleep 将返回错误(EINTR),并可以通过 rem 参数获取剩余的睡眠时间。

std::this_thread::sleep_for

std::this_thread::sleep_for 是 C++11 标准库中 <chrono> 头文件中定义的一个函数,它允许线程在指定的持续时间内休眠。相比于 sleepnanosleepstd::this_thread::sleep_for 提供了更高精度的延时控制,并且不会受到信号的影响而提前结束,还提供了更加面向对象和类型安全的延迟控制方式,并且可以与 <chrono> 库中的各种时间单位无缝配合。

函数原型如下:

template <typename Rep, typename Period>
void sleep_for(const std::chrono::duration<Rep, Period>& rel_time);

其中,Rep 是代表时间长度的类型(如 intlong long 等),Period 是一个表示时间周期的类型(如 std::ratio<1> 表示秒,std::milli 表示毫秒,std::nano 表示纳秒等)。

示例:

#include <iostream>
#include <chrono>
#include <thread>int main() {// 休眠1秒std::this_thread::sleep_for(std::chrono::seconds(1));// 休眠500毫秒std::this_thread::sleep_for(std::chrono::milliseconds(500));// 休眠100纳秒std::this_thread::sleep_for(std::chrono::nanoseconds(100));std::cout << "Sleep finished.\n";return 0;
}

这个函数会阻塞当前线程直到指定的时间过去,但它仍然可能会受到操作系统调度的影响,实际休眠时间可能会略大于或小于指定时间。此外,如同 nanosleepstd::this_thread::sleep_for 也可能被信号打断,但通常在信号处理完毕后会继续休眠剩余时间。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重磅推荐!四信AI智能一体屏系列全网上线

近年来&#xff0c;随着物联网、云计算、人工智能等新兴技术快速发展&#xff0c;制造、能源、交通、零售、医疗等行业设备需要更高程度的自动化控制。 传统的计算机和控制设备早已无法满足如今高性能复杂任务的要求&#xff0c;越来越多主流行业的项目落地依靠工控机&#xff…

基于springboot的大创管理系统

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大创管理系统的开发全过程。通过分析大创管理系统管理的不足&#xff0c;创建了一个计算机管理大创管理系统的方案。文章介绍了大创管理系统的系统分析部分&…

Stanford-Coursera 算法Week1 笔记

题外话&#xff1a;全文免费放心食用&#xff0c;作者在此求个 三连关注 1. Integer Multiplication&#xff08;引入&#xff09; &#xff08;很小的时候我们就学过&#xff1a;两个数字相乘的算法——将输入(两个数字)转换为输出(它们的乘积)的一组定义良好的规则&#xf…

网络安全资源和参考指南

由美国国防部&#xff08;DoD&#xff09;发布的《网络安全资源和参考指南》&#xff0c;旨在为美国政府、商业部门以及美国盟友和伙伴之间的安全合作提供有用的、现成的参考资料。文档涵盖了网络安全规范、最佳实践、政策和标准&#xff0c;这些都是由美国联邦政府、国防部以及…

vue3实现excel导出

前言&#xff1a;在开发一些管理系统的时候&#xff0c;常常会遇到表格导入导出的问题&#xff0c;总的来说呢&#xff0c;代码模板也挺固定的&#xff0c;仅以此博客作为记录以供参考 html部分 <Button click"downLoadPlan" type"primary">导出方案…

软件测试学习

软件测试学习 编辑时间&#xff1a;2024/5/17 0.理论学习 第一单元 Q开发工程师和测试工程师的关系理解 Q软件测试的目的和原则&#xff0c;识记、理解 为什么要进行软件测试 软件产品最终具备哪些功能由客户需求决定&#xff0c;客户需求如何转化为最终的软件产品要…

Java8 Optional常用方法使用场景

前言&#xff1a; Optional 是 Java 8 的新特性&#xff0c;专治空指针异常&#xff08;NullPointerException, 简称 NPE&#xff09;问题&#xff0c;它是一个容器类&#xff0c;里面只存储一个元素&#xff08;这点不同于 Conllection&#xff09;。 为方便用户通过 Lambda 表…

Wpf 使用 Prism 实战开发Day23

自定义对话框服务 当原有对话框不能满足需求的时候&#xff0c;可以通过自定义对话框来实现特殊的需求 一.自定义对话框主机服务步骤&#xff1a; 1.建立一个IDialogHostService 接口类&#xff0c;继承自 IDialogService 对话框服务类。并且自定义基类的服务方法。 public …

mac电脑安装python的spacy

打开终端&#xff1a;你可以通过在Finder中打开应用程序 > 实用工具 > 终端&#xff0c;或者使用Spotlight搜索终端来打开它。 确认Python环境&#xff1a;在安装spacy之前&#xff0c;确认你使用的Python环境。如果你有多个Python版本&#xff0c;确保你使用的是正确的…

Java - Scanner类

Scanner类 scanner 是 Java 中的一个类。类是一个构造块&#xff0c;它定义了创建某些类型的对象&#xff08;实例&#xff09;时它们的属性和行为。在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;类可以视为创建对象的模板或蓝图&#xff0c; Scanner 类属于 jav…

【嵌入式软件工程师面经】Socket,TCP,HTTP之间的区别

目录&#xff1a; 目录 目录&#xff1a; 一、Socket原理与TCP/IP协议 1.1 Socket概念&#xff1a; 1.2 建立Socket连接&#xff1a; 1.3 SOCKET连接与TCP/IP连接 二、HTTP连接&#xff1a; 2.1 HTTP原理 三、三者的区别和联系 前些天发现了一个巨牛的人工智能学习网站&#xf…

markdown 文件渲染工具推荐 obsidian publish

背景 Markdown 是一种轻量级的标记语言&#xff0c;最开始使用它是觉得码字非常方便&#xff0c;从一开始的 word 排版到 markdown &#xff0c;还不太不习惯&#xff0c;用了 obsidian把一些文字发在网上后&#xff0c;才逐渐发现他的厉害之处。 让人更加专注于内容本身&…

转行java浅谈就业前景

Java市场环境 国内的一线、二线和三线城市都有着不同的就业环境&#xff1a; 一线城市&#xff08;如北京、上海、广州、深圳&#xff09;&#xff1a; 一线城市通常拥有最多的高科技公司和互联网企业总部&#xff0c;因此在这些城市&#xff0c;Java开发者通常有更多的就业…

[leetcode]字符串消除连续出现3次及以上的字符

#include <iostream> #include <string> using namespace std;void del(string &s) {int i0,j0;while(i<s.size()){ji;while(j<s.size() && s[j]s[i]){j;}if(j-i>3){s.erase(i,j-i);//消除重复的i0;}elsei;} }

C语言 浮点数 打印的方法

一、方式1 在C语言中&#xff0c;浮点数&#xff08;通常包括 float 和 double 类型&#xff09;的打印是通过标准库中的 printf 函数完成的。为了正确地打印浮点数&#xff0c;需要使用格式说明符来指定如何格式化输出。 #include <stdio.h> int main(void) { floa…

体量小但增速快,国内OTA平台与国际巨头差在哪?

5月3日&#xff0c;Booking、Expedia等国际OTA平台相继发布2024年第一季度财报。5月21日&#xff0c;携程发布2024年第一季度财报。至此&#xff0c;国内外主要OTA平台一季度成绩单均已披露。 受益于全球旅游市场复苏&#xff0c;三家OTA平台一季度营收同比均正向增长。增长之…

03-ArcGIS For JavaScript结合ThreeJS功能

ArcGIS For JavaScript结合ThreeJS功能 概述three.js中功能实现externalRenderers&#xff08;4.28及以下版本&#xff09;RenderNode&#xff08;4.29版本&#xff09; 概述 ArcGIS For Javacript提供了一些对象可以支持加载webgl上下文信息&#xff0c;这里包括webgl编程的代…

基于jeecgboot-vue3的Flowable增加流程支持组件与element-plus组件导入支持

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、package.json文件需要增加相关流程组件&#xff0c;如下 "dependencies": {"element-plus/icons-vue": "^2.3.1","highlightjs/vue-plugin":…

蔬菜水果店做配送分销小程序的作用是什么

蔬菜水果是人们生活必需&#xff0c;传统为线下市场、超市、路边小摊等场景购买&#xff0c;如今快节奏时代&#xff0c;用户需要更快完成消费、商家也需要摆脱竞争获客转化以及提升自己的运营能力。 蔬菜水果隔三岔五或每天都会购买&#xff0c;老客粘性较高&#xff0c;还需…