QNX usleep測試

QNX usleep測試

結論

usleep時間在QNX上沒有ubuntu上運行準確,但是10ms以上誤差不大。

測試代碼

testsleep.cpp的代碼如下:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>double usleep_real_cost(unsigned int us) {// start timerstruct timespec start, end;clock_gettime(CLOCK_MONOTONIC, &start);usleep(us);clock_gettime(CLOCK_MONOTONIC, &end);unsigned int cost = (end.tv_sec - start.tv_sec) * 1e9 + (end.tv_nsec - start.tv_nsec);return cost;
}int main() {const unsigned int us_list[] = {1, 10, 100, 1000, 10000, 100000, 1000000};for (int i = 0; i < sizeof(us_list) / sizeof(unsigned int); i++) {unsigned int us = us_list[i];double cost = usleep_real_cost(us);printf("usleep %dus cost %fms\n", us, cost / 1e6);}
}

在QNX lidar上測試結果如下

# ./testsleep_qnx 
usleep 1us cost 2.000000ms
usleep 10us cost 2.000000ms
usleep 100us cost 2.000000ms
usleep 1000us cost 2.000000ms
usleep 10000us cost 11.000000ms
usleep 100000us cost 101.000000ms
usleep 1000000us cost 1001.000000ms
# ./testsleep_qnx  
usleep 1us cost 2.000000ms
usleep 10us cost 2.000000ms
usleep 100us cost 2.000000ms
usleep 1000us cost 2.000000ms
usleep 10000us cost 11.000000ms
usleep 100000us cost 101.000000ms
usleep 1000000us cost 1002.000000ms

在QNX VmWare虛擬機下測試如下

# ./testsleep_qnx 
usleep 1us cost 2.000000ms
usleep 10us cost 2.000000ms
usleep 100us cost 2.000000ms
usleep 1000us cost 2.000000ms
usleep 10000us cost 11.000000ms
usleep 100000us cost 101.000000ms
usleep 1000000us cost 1001.000000ms
# ./testsleep_qnx  
usleep 1us cost 2.000000ms
usleep 10us cost 2.000000ms
usleep 100us cost 2.000000ms
usleep 1000us cost 2.000000ms
usleep 10000us cost 11.000000ms
usleep 100000us cost 101.000000ms
usleep 1000000us cost 1002.000000ms

在ubuntu下測試結果如下

./testsleep_ubuntu 
usleep 1us cost 0.480022ms
usleep 10us cost 0.418154ms
usleep 100us cost 0.495366ms
usleep 1000us cost 1.097107ms
usleep 10000us cost 10.065300ms
usleep 100000us cost 100.435447ms
usleep 1000000us cost 1000.077292ms
test@ubuntu:~/test$ ./testsleep_ubuntu 
usleep 1us cost 0.281439ms
usleep 10us cost 0.473100ms
usleep 100us cost 0.493371ms
usleep 1000us cost 1.480456ms
usleep 10000us cost 10.512084ms
usleep 100000us cost 100.464449ms
usleep 1000000us cost 1000.086385ms

QNX社區的帖子

Solution Titlenanosleep() vs clock_nanosleep()
Solution Number00000376
Solution DetailsIf you use nanosleep() to put a thread to sleep and in the meantime other processes may change CLOCK_REALTIME clock with ClockTime() or clock_settime(), then please consider using clock_nanosleep() and specify the clock_id to be CLOCK_MONOTONIC.Here is the reason. There are two types of system clocks. The CLOCK_MONOTONIC clock keeps a monotonically increasing count of clock ticks since system bootup. The CLOCK_REALTIME keeps the time of day clock by adding an adjustment to the CLOCK_MONOTONIC clock count. When nanosleep() is called, a timeout value is calculated based on the the CLOCK_MONOTONIC count and the “TOD” adjustment at that moment. If a process calls ClockTime() to set a new time of day afterwards, the adjustment part will be changed according to the new value. When the right wakeup moment comes, the “TOD” adjustment is no longer the original value therefore nanosleep() misses the right wakeup moment.
Does this solution help you answer your question?

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

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

相關文章

sklearn 筆記:neighbors.NearestNeighbors 自定義metric

1 數據 假設我們有這樣的一個數據tst_lst&#xff0c;表示的是5條軌跡的墨卡托坐標&#xff0c;我們希望算出逐點的曼哈頓距離之和&#xff0c;作為兩條軌跡的距離 [array([[11549759.51313693, 148744.89246911],[11549751.49813359, 148732.97804463],[11549757.620705…

Linux 常用命令匯總

1 linux定時任務 查看定時任務&#xff1a;crontab -l 每晚一點半執行定時任務&#xff1a; 30 1 * * * sh /var/lib/pgsql/pg_db_backup.sh >> /var/lib/pgsql/pg_db_backup.log 2>&1 配置定時任務&#xff1a;crontab -e 2 linux 內核版本查詢 cat /etc/r…

P5744 【深基7.習9】培訓

題目描述 某培訓機構的學員有如下信息&#xff1a; 姓名&#xff08;字符串&#xff09;年齡&#xff08;周歲&#xff0c;整數&#xff09;去年 NOIP 成績&#xff08;整數&#xff0c;且保證是 5 5 5 的倍數&#xff09; 經過為期一年的培訓&#xff0c;所有同學的成績都…

學習-java多線程

線程的創建 *繼承Tread,重寫run *實現Runnable接口,重寫run() [匿名內部類] *實現callable接口(有結果返回) 線程的常用方法 調用join保證這個方法先執行完成, 線程安全 并發編程 進程&#xff1a;就相當一個程序的實例線程&#xff1a;就是指令流&#xff08;一個進程包含多…

無重復字符的最長子串-中等

leetcode地址 給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的 最長子串 的長度。 示例 1:輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是 "abc"&#xff0c;所以其長度為 3。 示例 2:輸入: s "bbbbb" 輸出: 1 …

我有才打造私域流量的知識付費小程序平臺

在當今數字化時代&#xff0c;知識付費市場正在迅速崛起&#xff0c;而私域流量的概念也日益受到重視。私域流量指的是企業通過自有渠道獲取的、能夠自由支配的流量&#xff0c;這種流量具有更高的用戶粘性和轉化率。因此&#xff0c;打造一個基于私域流量的知識付費小程序平臺…

實現:切換頁面切換標題,擴展 vue-router 的類型

布局容器-頁面標題 網址&#xff1a;https://router.vuejs.org/zh/guide/advanced/meta 給每一個路由添加 元信息 數據 router/index.ts const router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: /login, component: () > im…

問題:數組對象去重

問題&#xff1a;數組對象去重 var arr [{name: ‘a’,id: 1}, {name: ‘a’,id: 2}, {name: ‘b’,id: 3}, {name: ‘c’,id: 4}, {name: ‘c’,id: 6}, {name: ‘b’,id: 6}, {name: ‘d’,id: 7}]; 對數組對象name進行去重處理&#xff0c; 結果顯示為&#xff1a; [{name…

第一啟富金:新添澳大利亞(ASIC)牌照

第一啟富金&#xff1a;澳大利亞證券及投資委員會&#xff08;ASIC&#xff09; GOLDWELL GLOBAL PTY LTD 是 WHOLESALE INVESTOR SERVICES PTY LTD&#xff08;CAR 編號 001304943&#xff09;的企業授權代表開發澳大利亞客戶&#xff0c;WHOLESALE INVESTOR SERVICES PTY LT…

XML是什么

XML是是什么&#xff1f; XML&#xff08;Extensible Markup Language&#xff09;&#xff0c;中文是可擴展標記語言&#xff0c;是標準通用標記語言的子集。它是一種標記語言&#xff0c;用于標記電子文檔&#xff0c;使其結構化。 XML可以用來標記數據&#xff0c;定義數據…

【軟件推薦】文本轉語音,語音轉wav,導入ue5

文字轉語音 在線免費文字轉語音 - TTSMaker官網 | 馬克配音https://ttsmaker.cn/ 文件轉換器 語音轉wav Convertio — 文件轉換器https://convertio.co/zh/

C#應用:MQTT分析——CONNECT為例子

源代碼: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Sockets;namespace ConsoleApp1 {class Program{static void Main(string[] args){Connect();}/// <summary>/// 向…

HarmonyOS應用程序框架——UIAbility實操

UIAbility概述 UIAbility是一種包含用戶界面的應用組件&#xff0c;主要用于和用戶進行交互。UIAbility也是系統調度的單元&#xff0c;為應用提供窗口在其中繪制界面。 每一個UIAbility實例&#xff0c;都對應于一個最近任務列表中的任務。 一個應用可以有一個UIAbility&…

Leetcode—901.股票價格跨度【中等】

2023每日刷題&#xff08;五十二&#xff09; Leetcode—901.股票價格跨度 算法思想 實現代碼 class StockSpanner { public:stack<pair<int, int>> st;int curday -1;StockSpanner() {st.emplace(-1, INT_MAX);}int next(int price) {while(price > st.top(…

油猴(Tampermonkey)瀏覽器插件簡單自定義腳本開發

介紹 瀏覽器插件&#xff0c;包括油猴插件和其他插件&#xff0c;通過它們可以實現瀏覽器網頁的定制化與功能增強。 其他插件一般只有某種具體的功能&#xff0c;且已經寫死而不能更改&#xff0c;比如Adblock插件只用于去廣告。 油猴插件是一款用于管理用戶腳本的插件&…

使用Rust 構建C 組件

協議解析&#xff0c;這不就很快了&#xff0c;而且原生的標準庫紅黑樹和avl 樹支持&#xff0c;異步tokio 這些庫&#xff0c;編寫應用組件就很快了 rust 標準庫不支持 unix 的消息隊列&#xff0c;但是支持 shm 和 uds&#xff0c;后者從多方面考慮都比&#xff0c;消息隊列更…

教育類直播介紹

教育類直播是一種在線教育形式&#xff0c;它允許學生和教師通過實時視頻通話進行互動學習。這種學習方式可以為學生提供更靈活的學習時間和地點&#xff0c;同時也可以幫助教師更好地與學生進行互動和指導。 在教育類直播中&#xff0c;學生可以通過網絡與教師和其他學生進行…

c/c++中一些不常用但有用的知識

1.變長數組 bool fun(int cnt) {unsigned char data[cnt];return true; } 在 C 語言中&#xff0c;變長數組&#xff08;Variable Length Arrays&#xff0c;VLA&#xff09;是 C99 標準引入的特性&#xff0c;允許使用變量來定義數組的長度。因此&#xff0c;在 C 版本的代碼…

快速在VMware虛擬機上運行Kali Linux(保姆級教程)

本期將演示如何在VMware虛擬機上快速、輕松地安裝Kali Linux。Kali Linux是一款專為滲透測試和網絡安全而設計的操作系統&#xff0c;擁有很多強大的工具和功能。 在運行任何虛擬機之前&#xff0c;一定要先確保已經打開主板BIOS上的虛擬化支持。 下載VMware 接著來到vmware的…

vue 一直運行 /sockjs-node/info?及 /sockjs-node/info報錯解決辦法

sockjs-node介紹 sockjs-node 是一個JavaScript庫&#xff0c;提供跨瀏覽器JavaScript的API&#xff0c;創建了一個低延遲、全雙工的瀏覽器和web服務器之間通信通道。 服務端&#xff1a;sockjs-node&#xff08;https://github.com/sockjs/sockjs-node&#xff09; 客戶端&a…