1. 程式人生 > >sem_timedwait 等待時間小於1s時的精確性

sem_timedwait 等待時間小於1s時的精確性

原始碼:

 sem_t set;

 set_init(&sem,0,0);

 int i = 0;

 while(i < 100)

 {

       struct timespec ts;

       ts.tv_sec = time();

       ts.tv_nsec = 998*1000*1000;

       sem_timedwait(&sem,&ts);

 }

原意:函式迴圈100次,每次等待998ms。結果:函式瞬間結束

原因分析:

按照man 的解釋使用sem_timedwait,用time()取時間,原以為是set_timedwait的精確性有問題,看來是冤枉它了。

time()函式返回當前絕對時間的秒級資料。

1、假設第一次迴圈之前絕對時間為1s990ms,則函式等待到1s998ms。等待時間為9ms。

     第二次設定時間:秒數仍為1s,而微秒級為998ms,這個時間已經在第一次迴圈到了,則函式不等待立即返回。

     以後98次相同。(統計以後的99次只運行了不到1ms,可見計算機的速度)

2、假設第一次迴圈之前絕對時間為1s999ms,則時間已經過了,函式不等到立即返回。

     可能以後的某個迴圈秒設定為2,再等待到998ms。不過這時等待時間已經不準確

解決方法:得到當前精確的時間,本函式可以精確到1毫秒,不過對於大部分應用已經足夠了,呵呵

 sem_t set;

 set_init(&sem,0,0);

 int i = 0;

 while(i < 100)

 {

       struct timespec ts;

       struct timeval tt;

       gettimeofday(&tt,NULL);

       ts.tv_sec = tt.tv_sec;

       ts.tv_nsec = tt.tv_usec*1000 + x * 1000 * 1000;//這裡可能造成納秒>1000 000 000

       ts.tv_sec += ts.tv_nsec/(1000 * 1000 *1000);

       ts.tv_nsec %= (1000 * 1000 *1000);

       sem_timedwait(&sem,&ts);

       i++;

 }


相關推薦

sem_timedwait 等待時間小於1s精確性

原始碼:  sem_t set;  set_init(&sem,0,0);  int i = 0;  while(i < 100)  {        struct timespec ts;        ts.tv_sec = time();       

ubuntu16.10 設定grub選單的預設等待時間,開機顯示詳細的引導資訊

參考: 不要直接修改/boot/grub/grub.cfg,直接修改這個檔案有用,但是可能在update-grub命令後又被覆蓋,所以推薦修改/etc/default/grub檔案。 修改前的配置檔案(/etc/default/grub): GRUB_DEFAULT=0 GRUB_HIDDEN_TI

使用Ajax同步請求等待時間過長增加頁面提示問題

最近在做專案時,有一個需求是批量列印好多個合同,使用AJAX向後臺傳送資料,等待後臺執行後,需要把生成之後的檔案地址傳送過來。 後臺的處理時間比較長,根據合同的多少可能等待時間比較長,會達到10s左右,這個時候如果不加任何的提示,會導致使用者因為沒有看到是否執行而導致重複的操作,為了增加使用者的體驗感,,以

解決windows xp 開機出現“歡迎使用”等待時間很長

1.更改系統服務至使系統啟動變慢, 服務名稱:Event Log 解決方法,改回初始狀態 2.系統配置檔案過多.清理個人賬戶的配製檔案。X:\Documents and Settings\賬戶名\Application Data (可以試著排除這個原因,可以新建一個

用systemd管理程序,修改復位超時等待時間

用systemd管理程序時,系統復位預設等待時間為90s,如果一個程序不能正常結束,則需要倒計時90秒,系統才能復位,立馬感到很煩。 來先看看這個90S是在哪裡定義的吧,不難發現,這個引數是在下面檔案中: #  This file is part of systemd. #

React Native創建項目等待時間長解決

npm 國內 set 初始化 registry span 什麽 時間 init p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Verdana; color: #ff6600; background-color: #

實時監控本機內存和硬盤剩余空間,剩余內存小於 500M、根分區剩余空間小於 1000M ,發送報警

發送 resource 報警 單位 don 分區 剩余空間 resources ffi #!/bin/bashgen_size=$(df / |awk ‘/\//{print $4}‘) #提取根分區剩余空間mem_size=$(free |awk ‘/Mem/{pri

指定時間增加年月日 分秒

mon hour catch tin 時間 new 異常 ror () public static String calendarMethod(String time, int year, int month, int day, int hour, int min, int

倒計時2(小於0的格式)

word 16px 活動 ont 倒計時 doctype type bsp 分享圖片 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

selenium webdriver顯示等待時間

ceo 單擊 con click sentinel 條件 new text 操作 當頁面加載很慢時,推薦使用顯示等待:等到需要操作的那個元素加載成功之後就直接操作這個元素,不需要等待其他元素的加載 WebDriverWait wait = new WebDriverWai

DataContractJsonSerializer序列化時間類型轉換為UTC溢出問題

設置 arr AD toa C# exception default AR AC 問題描述 如下一個實體類,含有非空時間類型屬性,默認是C#的最小時間,在使用DataContractJsonSerializer將該類對象序列化成JSON時,拋出異常信息:System.Run

第二章(連續時間系統的域分析之二)

image 狀態 技術分享 得出 滿足 激勵 方程 alt 學習   零輸入響應和零狀態響應   這名字取得有點怪,其實零輸入響應即是狀態響應,而零狀態響應就是輸入響應。   零狀態響應:不考慮起始時刻系統儲能的作用(起始組狀態為0),由系統的外加激勵信號所產生的響應   

最近項目中遇到了一個場景,其實很常見,就是定時獲取接口刷新數據。那麽問題來了,假設我設置的定時時間1s,而數據接口返回大於1s,應該用同步阻塞還是異步?

set timeout pre git plain 異步執行 項目 strip nod 初識setTimeout 與 setInterval 先來簡單認識,後面我們試試用setTimeout 實現 setInterval 的功能 setTimeout 延遲一段時間執行一

Robotframework關於等待時間的關鍵字

robotframework 等待關鍵字 1,Sleep一個線程等待的邏輯,進程等待N秒後再運行;2,Implicit Wait隱式等待,Get Selenium Implicit Wait 與 Set Selenium Implicit Wait分別是取隱式等待時間與設置隱式等待時間;隱式等待,在一

文字小於12px,設置line-height不居中問題

orm tran line java css https 所有 解釋 highlight 設置了文字了小於12px時,會存在設置了line-height的不生效的問題,主要是由於基線的問題,這篇文章解釋的很清楚,有興趣的可以看下https://blog.csdn.net/q

selenium 等待時間設定

引自:https://blog.csdn.net/wangsy0202/article/details/77867467 1.使用Thread.sleep(),這是最笨的方法,但有時候也能用到而且很實用。 2.隱示等待,隱性等待是指當要查詢元素,而這個元素沒有馬上出現時,告訴WebDrive

使用Mybatis查詢,返回時間資料沒有分秒 解決方法

今天我在用mybatis查詢資料時,發現返回的時間資料只返回了日期  並沒有 ‘時’,‘分’,‘秒’。 後來我想到:Oralce的日期型別有很多種,Date ,Timestamp等,那是不是和我xml裡面配置的jdbcType型別有關, 1.檢查你的mysql資料表 &nbs

selenium之網頁等待時間

1、為什麼需要設定等待時間: 因為網頁開啟後需要載入對應的資原始檔,頁面渲染,視窗處理等等,我們需要等網頁開啟穩定後才能準確的進行後面的定位等操作 2、等待的分類 (1)強制等待 from time import sleep  sleep(3)  #強制等待5秒後才進行下一步操作;缺點是不

轉 jmeter 等待時間 pacing think time

第一部分:Request之間的等待時間的設定 先明確一些概念:1)定時器是在每個sampler(取樣器)之前執行的,而不是之後;是的,你沒有看錯,不管這個定時器的位置放在sampler之後,還是之下,它都在sampler之前得到執行。2)定時器是有作用域的;當執行一個sampler之前時,所有當前作用域內的

離散時間訊號的域表示

文章目錄 離散時間訊號的長度 離散時間訊號的強度   在連續時間系統中,我們表示用 x (