在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.pswp.cn/web/80073.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80073.shtml
英文地址,請注明出處:http://en.pswp.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…