簡體   English   中英

bash計時器(以毫秒為單位)

[英]bash timer in milliseconds

我正在嘗試以毫秒為單位實現5分鍾(300秒)的計時器,但是睡眠0.001需要5分鍾以上。

如果將if [ $t -ge 300000 ]更改為if [ $t -ge 30000 ] ,它將在3分鍾內完成。

df1,df2分別保存時間t1和t2處的磁盤使用量值。

t=0
x=0
df1
    while [ $x -lt 10000 ]

        sleep 0.001
        df2
        x=(( df1-df2 ))
        if [ $t -ge 300000 ]
        then
        t=0
        df1            
        else
        (( t++ ))
        fi
    done
dosomething

我想每隔0.001秒測試$x df1df2每300秒應保存一個新值。 我該如何實現?

日期%N,將獲得以納秒為單位的時間,也許這有幫助

start_at=$(date +%s,%N)
_s1=$(echo $start_at | cut -d',' -f1)   # sec
_s2=$(echo $start_at | cut -d',' -f2)   # nano sec
# do somethong here
end_at=$(date +%s,%N)
_e1=$(echo $end_at | cut -d',' -f1)
_e2=$(echo $end_at | cut -d',' -f2)
time_cost=$(bc <<< "scale=3; $_e1 - $_s1 + ($_e2 -$_s2)/1000000000")

我很確定,像您這樣的一次睡眠不會花費幾分鍾。 雖然它通常會比您要求的毫秒長,但實際的睡眠時間仍應遠遠低於一秒,或者,如果系統負載很重,則最多只有幾秒鍾。

應用程序中的一個缺陷是您沒有考慮循環的一次迭代需要花費多長時間。 您無法事先知道; 您只知道會比一毫秒更長,但不會更長。 因此,您應該在經過一定時間后結束循環-即將開始時間存儲在某個位置,並將當前時間與開始時間進行比較。

第二個問題是您沒有在任何地方設置變量df1和df2,但是也許您忽略了這個細節,因為您認為它與您的問題無關。

如果您正在尋找一個顯示毫秒的倒數計時器,那么您正在尋找。

這將計時器顯示為百分之一秒。

根據需要更改邏輯。

    timer() {
    time="`date '+%H:%M:%S' -d "$1"`"
    if [ $# -gt 0 ] && [ "$1" = "$time" ]; then
        echo 
        IFS=:
        set -- $*
        secs=$(( ${1#0} * 3600 + ${2#0} * 60 + ${3#0} ))
        while [ $secs -ge 0 ]; do
                for msec in {99..0}; do
                printf "\rCountdown Timer: %02d:%02d:%02d:%02d" $((secs/3600)) $(( (secs/60)%60)) $((secs%60))  $((msec))
                sleep .01
                done
                secs=$(( $secs - 1 ))
        done
        echo
    fi
    echo 
    }

    Usage: # timer HH:MM:SS
    Where: HH  Time in Hours
           MM  Time in Mins
           SS  Time in Secs
    Example: 
           # timer 00:10:00 
           Sets a countdown timer for 10 mins while displaying hundredth of a second.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM