clock_getres系統調用及示例

39. clock_getres - 獲取時鐘精度

函數介紹

clock_getres系統調用用于獲取指定時鐘的精度(分辨率)。它返回時鐘能夠表示的最小時間間隔。

函數原型

#include <time.h>int clock_getres(clockid_t clk_id, struct timespec *res);

功能

獲取指定時鐘的精度,即能夠表示的最小時間間隔。

參數

  • clockid_t clk_id: 時鐘ID
  • struct timespec *res: 指向timespec結構體的指針,用于存儲精度信息

返回值

  • 成功時返回0
  • 失敗時返回-1,并設置errno

特似函數

  • clock_gettime(): 獲取時鐘時間
  • gettimeofday(): 獲取系統時間

示例代碼

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <errno.h>
#include <string.h>int main() {struct timespec res;int result;printf("=== Clock_getres 函數示例 ===\n");// 示例1: 獲取各種時鐘的精度printf("\n示例1: 不同時鐘的精度\n");// CLOCK_REALTIMEresult = clock_getres(CLOCK_REALTIME, &res);if (result == -1) {printf("  CLOCK_REALTIME精度獲取失敗: %s\n", strerror(errno));} else {printf("  CLOCK_REALTIME精度: %ld.%09ld 秒\n", res.tv_sec, res.tv_nsec);printf("  即: %ld 納秒\n", res.tv_nsec);}// CLOCK_MONOTONICresult = clock_getres(CLOCK_MONOTONIC, &res);if (result == -1) {printf("  CLOCK_MONOTONIC精度獲取失敗: %s\n", strerror(errno));} else {printf("  CLOCK_MONOTONIC精度: %ld.%09ld 秒\n", res.tv_sec, res.tv_nsec);printf("  即: %ld 納秒\n", res.tv_nsec);}// CLOCK_PROCESS_CPUTIME_IDresult = clock_getres(CLOCK_PROCESS_CPUTIME_ID, &res);if (result == -1) {printf("  CLOCK_PROCESS_CPUTIME_ID精度獲取失敗: %s\n", strerror(errno));} else {printf("  CLOCK_PROCESS_CPUTIME_ID精度: %ld.%09ld 秒\n", res.tv_sec, res.tv_nsec);printf("  即: %ld 納秒\n", res.tv_nsec);}// CLOCK_THREAD_CPUTIME_IDresult = clock_getres(CLOCK_THREAD_CPUTIME_ID, &res);if (result == -1) {printf("  CLOCK_THREAD_CPUTIME_ID精度獲取失敗: %s\n", strerror(errno));} else {printf("  CLOCK_THREAD_CPUTIME_ID精度: %ld.%09ld 秒\n", res.tv_sec, res.tv_nsec);printf("  即: %ld 納秒\n", res.tv_nsec);}// 示例2: 錯誤處理演示printf("\n示例2: 錯誤處理演示\n");// 使用無效的時鐘IDresult = clock_getres(999, &res);if (result == -1) {if (errno == EINVAL) {printf("  無效時鐘ID錯誤處理正確: %s\n", strerror(errno));}}// 使用NULL指針result = clock_getres(CLOCK_REALTIME, NULL);if (result == 0) {printf("  NULL指針參數被接受(用于查詢時鐘是否存在)\n");}// 示例3: 時鐘類型說明printf("\n示例3: 支持的時鐘類型\n");printf("CLOCK_REALTIME: 系統實時鐘\n");printf("  - 可以被設置和調整\n");printf("  - 受NTP和手動調整影響\n");printf("  - 用于獲取當前時間\n\n");printf("CLOCK_MONOTONIC: 單調時鐘\n");printf("  - 不會倒退\n");printf("  - 不受系統時間調整影響\n");printf("  - 用于測量時間間隔\n\n");printf("CLOCK_PROCESS_CPUTIME_ID: 進程CPU時間\n");printf("  - 測量進程使用的CPU時間\n");printf("  - 通常有較高精度\n\n");printf("CLOCK_THREAD_CPUTIME_ID: 線程CPU時間\n");printf("  - 測量線程使用的CPU時間\n");printf("  - 用于性能分析\n\n");// 示例4: 精度對比printf("示例4: 不同時鐘精度對比\n");clockid_t clocks[] = {CLOCK_REALTIME,CLOCK_MONOTONIC,CLOCK_PROCESS_CPUTIME_ID,CLOCK_THREAD_CPUTIME_ID};const char *clock_names[] = {"CLOCK_REALTIME","CLOCK_MONOTONIC","CLOCK_PROCESS_CPUTIME_ID","CLOCK_THREAD_CPUTIME_ID"};for (int i = 0; i < 4; i++) {if (clock_getres(clocks[i], &res) == 0) {printf("  %-25s: %10ld ns\n", clock_names[i], res.tv_nsec);}}// 示例5: 實際應用演示printf("\n示例5: 實際應用演示\n");printf("時鐘精度對程序設計的影響:\n");// 演示高精度計時struct timespec start, end, diff;if (clock_getres(CLOCK_MONOTONIC, &res) == 0) {printf("  使用CLOCK_MONOTONIC進行高精度計時:\n");printf("  理論精度: %ld 納秒\n", res.tv_nsec);// 進行簡單計時演示if (clock_gettime(CLOCK_MONOTONIC, &start) == 0) {// 執行一些操作volatile int sum = 0;for (int i = 0; i < 1000; i++) {sum += i;}if (clock_gettime(CLOCK_MONOTONIC, &end) == 0) {// 計算時間差if (end.tv_nsec < start.tv_nsec) {diff.tv_sec = end.tv_sec - start.tv_sec - 1;diff.tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec;} else {diff.tv_sec = end.tv_sec - start.tv_sec;diff.tv_nsec = end.tv_nsec - start.tv_nsec;}printf("  實際測量時間: %ld.%09ld 秒\n", diff.tv_sec, diff.tv_nsec);}}}// 示例6: 性能考慮printf("\n示例6: 性能考慮\n");printf("不同精度時鐘的性能特點:\n");printf("1. 高精度時鐘通常開銷較大\n");printf("2. 需要在精度和性能間平衡\n");printf("3. 選擇合適的時鐘類型很重要\n");printf("4. 避免不必要的高精度要求\n\n");printf("時鐘選擇建議:\n");printf("- 一般計時: CLOCK_REALTIME\n");printf("- 性能測量: CLOCK_MONOTONIC\n");printf("- CPU使用率: CLOCK_PROCESS_CPUTIME_ID\n");printf("- 線程性能: CLOCK_THREAD_CPUTIME_ID\n\n");printf("總結:\n");printf("clock_getres用于查詢時鐘精度\n");printf("不同類型的時鐘有不同的精度\n");printf("了解時鐘精度有助于正確使用計時函數\n");printf("合理選擇時鐘類型可以提高程序性能\n");return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91055.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91055.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91055.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MCU+RTOS調試

1. 引言在做項目時&#xff0c;百分之三十的時間寫代碼&#xff0c;還有百分之70的時間用于調試。本期將以Keil為例進行調試章節的講解&#xff0c;目的在于做出一個標準化的調試步驟&#xff0c;方便大家學習如何調試代碼。內容分為基礎調試、中級調試及進階調試三部分&#x…

Redis的數據淘汰策略是什么?有哪些?

1.監測設置了TTL的數據volatile-lru&#xff1a;淘汰最近最少使用的數據volatile-lfu&#xff1a;淘汰最近使用次數最少的數據volatile-ttl&#xff1b;淘汰將要過期的數據volatile-random&#xff1a;隨機淘汰2.監測全庫數據allkeys-lru&#xff1a;淘汰最近最少使用的數據all…

相控陣波束躍度指向誤差Matlab仿真

波束躍度影響&#xff1a;TR芯片移相器位數、陣元數量、校準后陣元初始相位、TR芯片移相器精度、波控計算精度等。用MATLAB進行TR芯片移相器位數、陣元數量對指向誤差進行仿真。 close all; %線陣波束躍度仿真 20250726 %beam displacement % 波束躍度影響&#xff1a;TR芯片移…

板凳-------Mysql cookbook學習 (十二--------6)

MySQL 8 導入二進制文件(trailer.ogv)操作指南 在MySQL中導入二進制文件(如trailer.ogv視頻文件)通常有幾種方法&#xff0c;我將詳細介紹每種方法的操作步驟。 方法一&#xff1a;使用LOAD_FILE函數導入BLOB字段 這是最直接的方法&#xff0c;適合中小型二進制文件。sql - 1. …

昇思學習營-【模型推理和性能優化】學習心得_20250730

一、權重的加載 模型包含兩部分&#xff1a; base model 和 LoRA adapter 其中base model的權重在微調時被凍結&#xff0c; 推理時加載原權重即可&#xff0c;LoRA adapter可通過PeftModel.from_pretrained進行加載。 二、啟動推理 通過model.generate&#xff0c;啟動推理…

[AI8051U入門第十一步]W5500-服務端

學習目標: 1、連接TCP/IP 2、學習W5500作為服務端代碼一、TCP/IP介紹 TCP/IP 協議棧介紹 TCP/IP(Transmission Control Protocol / Internet Protocol)是互聯網通信的核心協議族,定義了數據如何在網絡中進行傳輸和路由。它由多個協議組成,采用分層架構,確保不同設備之間…

C 標準庫 <time.h> 函數詳解

目錄 概述 1 核心數據類型 1.1 time_t 1.2 clock_t 1.3 struct tm 1.4 size_t 2 核心函數 2.1 時間獲取函數 2.2 時間轉換函數 2.3 時間差計算 2.4 時間格式化函數 3 線程安全版本&#xff08;POSIX 擴展&#xff09; 3.1 函數列表 3.2 時間處理完整示例 4 重要…

基于BEKK-GARCH模型的參數估計、最大似然估計以及參數標準誤估計的MATLAB實現

基于BEKK-GARCH模型的參數估計、最大似然估計以及參數標準誤估計的MATLAB實現。BEKK-GARCH模型是一種多變量GARCH模型&#xff0c;用于估計多個時間序列的條件方差和協方差矩陣。 MATLAB實現BEKK-GARCH模型 1. 準備數據 假設你已經有一個時間序列數據矩陣 returns&#xff0c;每…

TDengine 中 TDgpt 用于異常檢測

介紹 TDgpt 內置時序數據異常檢測模型 TDengine 中定義了異常&#xff08;狀態&#xff09;窗口來提供異常檢測服務。異常窗口可以視為一種特殊的事件窗口&#xff08;Event Window&#xff09;&#xff0c;即異常檢測算法確定的連續異常時間序列數據所在的時間窗口。與普通事件…

統計學08:概率分布

一、隨機變量隨機變量是一個將 隨機事件 映射到 數值 的數學函數&#xff0c;用于描述事件的結果。隨機變量可以是離散的&#xff08;如骰子&#xff09;或連續的&#xff08;如人的身高、體重&#xff09;。1&#xff09;概率質量函數PMF——離散隨機變量P(X x) 對應于某個值…

vue3【組件封裝】消息反饋 S-msgWin.vue (針對父容器對齊,左右居中,可自定義頂部距離)

最終效果成功的提示報錯的提示代碼實現components/SUI/S-msgWin.vue <script lang"ts" setup> const props defineProps({msg: {type: Object,required: true,},top: {type: String,default: "50%",},duration: {type: Number,default: 3000,}, });…

MySQL 8.0.42創建MGR集群

MySQL 8.0.42創建MGR集群 概述 關于MySQL MGR集群的介紹就不在這里做詳細的介紹了&#xff0c;大家可以自己到官網上查看閱讀。在這里主要是實際操作方面的內容 總體結構設計如下圖服務器節點信息序號角色IP地址數據庫端口MGR端口1主節點192.168.56.1043309100612從節點192.168…

《Go Web編程實戰派--從入門到精通》的隨筆筆記

第二章 Go Web 開發基礎2.1第一個Go Web 程序package mainimport ("fmt""net/http" )func hello(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello World") } func main() {server : &http.Server{Addr: "0.0.0.0:80&q…

MySQL在Linux環境下的性能調優

&#x1f4ca; MySQL性能基準測試&#xff1a;知己知彼建立性能基線的關鍵指標# 核心性能指標監控腳本 #!/bin/bash echo " MySQL Performance Baseline " mysql -e "SHOW GLOBAL STATUS LIKE Questions;" mysql -e "SHOW GLOBAL STATUS LIKE Uptime;…

PyQt事件處理機制深度指南:超越信號與槽的底層掌控

—— 5大核心策略實戰案例&#xff0c;解鎖GUI交互的底層密碼 &#x1f50d; 事件與信號槽的本質差異維度事件處理機制信號與槽機制抽象層級操作系統消息的原始封裝對事件的高級封裝應用場景控件行為定制/底層交互常規業務邏輯綁定執行順序先于信號槽觸發在事件處理完成后觸發性…

10_opencv_分離顏色通道、多通道圖像混合

split() 通道分離 void cv::split(const Mat & src,Mat * mvbegin ) merge() 通道合并 void cv::merge(InputArrayOfArrays mv,OutputArray dst ) Mat::at()方法 Mat::at()方法返回一個引用到指定的數組元素。 注意是引用&#xff0c;相當于兩者等價&#xff0c;也就是…

Kotlin的datetime庫

kotlinx 是一組不是 Kotlin 標準庫一部分&#xff0c;但非常實用的擴展項目集合。其中&#xff0c;kotlinx-datetime 是一個跨平臺的 Kotlin 時間日期處理庫。 如何在項目中使用該庫 Gradle 項目中 在 repositories 塊中添加 Maven Central 倉庫&#xff1a; repositories {…

基于模型蒸餾的大模型文案生成最佳實踐

背景 大語言模型在生成高質量文案方面表現優異&#xff0c;然而其巨大的計算資源消耗和存儲需求&#xff0c;使得實際應用尤其是在資源受限場景中的應用充滿挑戰。企業在尋求高效的文案生成時&#xff0c;常常面臨著在性能和資源之間權衡的困境。在這種背景下&#xff0c;模型…

調用通義千問大模型實現流式對話

前言 我使用的是硅基流動中通義千問免費的大模型&#xff1a;我的技術棧使用的 Next14.2 全棧框架。 代碼結構 需要使用的庫&#xff1a; npm i ai openai目錄結構&#xff1a; 基礎測試頁面 test-openai/page.tsx&#xff1a; use client;import { useChat } from ai/react;ex…

如何搭建Linux環境下的flink本地集群

第一步&#xff0c;搭建Linux環境 這里我使用的是 WSL2 安裝前&#xff0c;先用管理員打開終端&#xff0c;執行以下三條命令&#xff0c;目的是開啟安裝 WSL2所需要的環境 //開啟適用于windows的Linux子系統 dism.exe /online /enable-feature /featurename:Microsoft-Wind…