在Linux中使用 times函数 和 close函数 两种方式 打印进程时间。

times函数用于获取当前进程时间,其函数原型如下所示:

#include <sys/times.h>
clock_t times(struct tms *buf);  //使用该函数需要包含头文件<sys/times.h>。

函数参数和返回值含义如下:
         buf:times()会将当前进程时间信息存在一个 struct tms 结构体数据中,所以我们需要提供 struct tms 变量,使用参数 buf 指向该变量 。

        返回值:返回值类型为 clock_t(实质是 long 类型),调用成功情况下,将返回从过去任意的一个时间点(譬如系统启动时间)所经过的时钟滴答数(其实就是系统节拍数),将(节拍数 / 节拍率)便可得到秒数,返回值可能会超过 clock_t 所能表示的范围(溢出);调用失败返回-1,并设置 errno。

        如果我们想查看程序运行到某一个位置时的进程时间,或者计算出程序中的某一段代码执行过程所花费的进程时间,都可以使用 times()函数来实现。

struct tms {
 clock_t tms_utime; /* user time, 进程的用户 CPU 时间, tms_utime 个系统节拍数 */

clock_t tms_stime; /* system time, 进程的系统 CPU 时间, tms_stime 个系统节拍数 */
clock_t tms_cutime; /* user time of children, 已死掉子进程的 tms_utime + tms_cutime 时间总和 */
clock_t tms_cstime; /* system time of children, 已死掉子进程的 tms_stime + tms_cstime 时间总和 */
}; 

代码示例:

#include<stdio.h>
#include<stdlib.h>
#include<sys/times.h>
#include<unistd.h>int main(int argc ,char *agrv[])
{struct      tms     t_buf_start;struct      tms     t_buf_end;clock_t     t_start; clock_t     t_end;long    tck;int     i , j;/*获取系统的节拍率*/tck = sysconf(_SC_CLK_TCK);/*开始时间*/t_start     =    times(&t_buf_start);if (-1 == t_start){perror("times  error\n");exit(-1);}/*需要测试的代码段*/for ( i = 0; i < 20000; i++){// }for ( j = 0; j < 20000; j++){/* code */}sleep(1);   //休眠挂起/*结束时间*/t_end   =   times(& t_buf_end);if (-1 == t_end){/* code */perror("times error\n");exit(-1);}/*打印时间*/printf("时间总和: %f 秒\n", (t_end - t_start) / (double)tck);printf("用户 CPU 时间: %f 秒\n", (t_buf_end.tms_utime - t_buf_start.tms_utime) / (double)tck);printf("系统 CPU 时间: %f 秒\n", (t_buf_end.tms_stime - t_buf_start.tms_stime) / (double)tck);exit(0);}

 运行结果:

clock 函数
库函数 clock()提供了一个更为简单的方式用于进程时间,它的返回值描述了进程使用的总的 CPU 时间(也就是进程时间,包括用户 CPU 时间和系统 CPU 时间),其函数原型如下所示:

#include <time.h>
clock_t clock(void);

使用该函数需要包含头文件<time.h>。

 函数参数和返回值含义如下:
无参数。
返回值:返回值是到目前为止程序的进程时间,为 clock_t 类型,注意 clock()的返回值并不是系统节拍
数,如果想要获得秒数,请除以 CLOCKS_PER_SEC(这是一个宏)。如果返回的进程时间不可用或其值无
法表示,则该返回值是-1。
clock()函数虽然可以很方便的获取总的进程时间,但并不能获取到单独的用户 CPU 时间和系统 CPU 时
间,在实际编程当中,根据自己的需要选择。

代码示例:

#include<stdio.h>
#include<stdlib.h>
#include<sys/times.h>
#include<unistd.h>#define CLOCKS_PER_SEC  ((__clock_t) 1000000)
int clock();
int main(int argc ,char *agrv[])
{struct      tms     t_buf_start;struct      tms     t_buf_end;clock_t     t_start; clock_t     t_end;long    tck;int     i , j;/* 开始时间 */t_start = clock();if (-1 == t_start)exit(-1);/* *****需要进行测试的代码段***** */for (i = 0; i < 20000; i++)for (j = 0; j < 20000; j++);/* *************end************** *//* 结束时间 */t_end = clock();if (-1 == t_end)exit(-1);/* 打印时间 */
printf("总的 CPU 时间: %f\n", (t_end - t_start) / (double)CLOCKS_PER_SEC);
exit(0);
}

运行结果:

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

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

相关文章

Python文字转语音TTS库示例(edge-tts)

1. 安装 pip install edge-tts2. 命令行使用 # 生成语音文件 # -f:要转换语音的文本文件,例如一个txt文件 # --text:指明要保存的mp3的文本 # --write-media:指明保存的mp3文件路径 # --write-subtitles:指定输出字幕/歌词路径 # --rate:调整语速,+50%加快了50% # --v…

Elasticsearch性能调优全攻略:从日志分析到集群优化

#作者&#xff1a;猎人 文章目录 前言搜索慢查询日志索引慢写入日志性能调优之基本优化建议性能调优之索引写入性能优化提升es集群写入性能方法&#xff1a;性能调优之集群读性能优化性能调优之搜索性能优化性能调优之GC优化性能调优之路由优化性能调优之分片优化 前言 es里面…

MongoDB从入门到实战之Windows快速安装MongoDB

前言 本章节的主要内容是在 Windows 系统下快速安装 MongoDB 并使用 Navicat 工具快速连接。 MongoDB从入门到实战之MongoDB简介 MongoDB从入门到实战之MongoDB快速入门 MongoDB从入门到实战之Docker快速安装MongoDB 下载 MongoDB 安装包 打开 MongoDB 官网下载页面&…

Serverless,云计算3.0阶段

Hi~各位读者朋友们&#xff0c;感谢您阅读本文&#xff0c;我是笠泱&#xff0c;本期简单分享下Serverless。Serverless是一种云计算服务模式&#xff0c;为业务代码提供运行环境及调度服务。开发者只需专注于编写业务逻辑代码&#xff0c;无需管理底层基础设施&#xff08;如服…

eSearch:一款集截图、OCR与录屏于一体的多功能软件

eSearch&#xff1a;一款集截图、OCR与录屏于一体的多功能软件 软件介绍 eSearch是一款专为Windows 10和11用户设计的多功能软件&#xff0c;集截图、OCR文字识别、录屏等功能于一体&#xff0c;且完全免费。其便捷版无需安装&#xff0c;运行后最小化至托盘图标&#xff0c;…

React学习———useContext和useReducer

useContext useContext是React的一个Hook&#xff0c;用于在函数组件中访问上下文&#xff08;context&#xff09;的值。它可以帮助我们在组件树中共享状态&#xff0c;而不需要通过props一层层传递 特点 用于跨组件共享状态需要配合React.createContext和Context.Provider…

安卓刷机模式详解:Fastboot、Fastbootd、9008与MTK深刷

安卓刷机模式详解&#xff1a;Fastboot、Fastbootd、9008与MTK深刷 一、刷机模式对比 1. Fastboot模式 简介&#xff1a;传统安卓底层刷机模式&#xff0c;通过USB连接电脑操作优点&#xff1a;支持大多数安卓设备&#xff0c;操作相对简单缺点&#xff1a;需要设备进入特定…

HDFS的概述

HDFS组成构架&#xff1a; 注&#xff1a; NameNode&#xff08;nn&#xff09;&#xff1a;就是 Master&#xff0c;它是一个主管、管理者。 (1) 管理 HDFS 的名称空间&#xff1b; (2) 配置副本策略。记录某些文件应该保持几个副本&#xff1b; (3) 管理数据块&#xff0…

配置Spark环境

1.上传spark安装包到某一台机器&#xff08;自己在finaShell上的机器&#xff09;。 2.解压。 把第一步上传的安装包解压到/opt/module下&#xff08;也可以自己决定解压到哪里&#xff09;。对应的命令是&#xff1a;tar -zxvf 安装包 -C /opt/module 3.重命名。进入/opt/mo…

Java笔记五

1 Math类 1.1 概述 tips&#xff1a;了解内容 查看API文档&#xff0c;我们可以看到API文档中关于Math类的定义如下&#xff1a; Math类所在包为java.lang包&#xff0c;因此在使用的时候不需要进行导包。并且Math类被final修饰了&#xff0c;因此该类是不能被继承的。 Math…

QT 插槽实现

方法 1&#xff1a;使用 default property 实现标签插入 通过定义 default property&#xff0c;可以使组件直接嵌套在目标组件中&#xff0c;类似于插槽机制。 CustomSlotExample.qml import QtQuick 2.15 import QtQuick.Controls 2.15// 定义一个支持插槽的自定义组件 Re…

spark在shell中运行RDD程序

在hdfs中/wcinput中创建一个文件&#xff1a;word2.txt在里面写几个单词 启动hdfs集群 [roothadoop100 ~]# myhadoop start [roothadoop100 ~]# cd /opt/module/spark-yarn/bin [roothadoop100 ~]# ./spark-shell 写个11测试一下 按住ctrlD退出 进入环境&#xff1a;spark-shel…

Redis 主从复制的实现原理是什么?

Redis主从复制的实现原理可通过以下核心机制与流程解析&#xff1a; 一、核心目标与角色分工 Redis主从复制通过**单一主节点&#xff08;Master&#xff09;**处理写操作&#xff0c;**多个从节点&#xff08;Slave&#xff09;**同步数据并提供读服务&#xff0c;实现&…

量化交易 - 网格交易策略实现与原理解析

&#x1f4c8; 网格交易策略实现与原理解析 &#x1f9e0; 什么是网格交易策略&#xff1f; 网格交易&#xff08;Grid Trading&#xff09;是一种经典的量化交易策略&#xff0c;其核心思想是在价格的不同区间&#xff08;“网格”&#xff09;中设置买入和卖出操作&#xf…

前端npm的核心作用与使用详解

一、npm是什么? npm(Node Package Manager) 是 Node.js 的默认包管理工具,也是全球最大的开源代码库生态系统。虽然它最初是为 Node.js 后端服务设计的,但如今在前端开发中已成为不可或缺的基础设施。通过npm,开发者可以轻松安装、管理和共享代码模块。 特性: 依赖管理…

Vue3学习(组合式API——生命周期函数基础)

目录 一、Vue3组合式API中的生命周期函数。 &#xff08;1&#xff09;各阶段生命周期涉及函数简单介绍。 <1>创建挂载阶段的生命周期函数。 <2>更新阶段的生命周期函数。 <3>卸载阶段的生命周期函数。 <4>错误处理的生命周期函数。 &#xff08;2&…

道通EVO MAX系列无人机-支持二次开发

道通EVO MAX系列无人机-支持二次开发 EVO Max 系列采用Autel Autonomy自主飞行技术&#xff0c;实现复杂环境下的全局路径规划、3D场景重建、自主绕障和返航&#xff1b;高精度视觉导航能力&#xff0c;使其在信号干扰强、信号遮挡、信号弱等复杂环境下&#xff0c;依然获得高精…

网张实验操作-防火墙+NAT

实验目的 了解防火墙&#xff08;ENSP中的USG5500&#xff09;域间转发策略配置、NAT&#xff08;与路由器NAT配置命令不同&#xff09;配置。 网络拓扑 两个防火墙连接分别连接一个内网&#xff0c;中间通过路由器连接。配置NAT之后&#xff0c;内网PC可以ping公网&#xf…

FPGA: UltraScale+ bitslip实现(方案+代码)

收获 一晃五年~ 五年前那个夏夜&#xff0c;我对着泛蓝的屏幕敲下《给十年后的自己》&#xff0c;在2020年的疫情迷雾中编织着对未来的想象。此刻回望&#xff0c;第四届集创赛的参赛编号仍清晰如昨&#xff0c;而那个在家熬夜焊电路板的"不眠者"&#xff0c;现在…

机器学习笔记2

5 TfidfVectorizer TF-IDF文本特征词的重要程度特征提取 (1) 算法 词频(Term Frequency, TF), 表示一个词在当前篇文章中的重要性 逆文档频率(Inverse Document Frequency, IDF), 反映了词在整个文档集合中的稀有程度 (2) API sklearn.feature_extraction.text.TfidfVector…