QNX上毫秒級的執行緒休眠 delay

2021-08-26 04:46:00 字數 812 閱讀 4578

在前幾篇博文的樣例中大家可能留意到了乙個執行緒休眠方法:delay。這個方法接受乙個引數,就是休眠時間,不過和qnx上的sleep方法不同,delay方法的休眠時間以毫秒為單位,不是以秒為單位。這樣大家就可以通過delay(200)使執行緒等待200毫秒了,可以細緻地控制線程的執行。

delay方法的使用如下,其中的duration就是需要等待的毫秒數。

#include

unsigned int delay( unsigned int duration );

不過,因為delay的等待時間單位更小了,使用時也需要更加細緻。在《qnx® neutrino® realtime operating system program's guide》一書中對delay的使用有詳細說明。

主要注意的是「over sleeping」的現象,就是睡太久了。具體細節就不描述了,基本情況就是你通過delay(1)讓執行緒休眠一毫秒,很有可能執行緒的休眠時間會大於一毫秒,原因是1毫秒到的時候系統沒來的及馬上喚醒你的執行緒。如果這種誤差被人為放大,就可能對程式的正常執行產生影響。看下面的**:

for ( i=0; i < 1000; i++ )

delay(1);

}開發人員可能希望通過以上**讓執行緒休眠1秒,實際上以上的**休眠的時間可能會是2到3秒,因為誤差被放大了1000倍。

當然,下面的**就會更好一些:

for ( i=0; i < 100; i++ )

delay(10);

}上面的**將誤差放大了100倍,可能休眠的時間就是1.2秒左右。

總之,使用delay時要記住該方法是有誤差的,休眠時間總是會大於你設定的時間。

QNX 上的多執行緒程式設計

在qnx 文字介面程式設計除了簡單的鍵盤輸入,控制台輸出以外,還有好多重要的知識點需要學習,包括多執行緒,執行緒同步,程序通訊,資源管理器 硬體驅動 等等。首先了解一下qnx環境下的多執行緒程式設計。qnx環境實現了多執行緒併發,多執行緒切換時的複雜處理已經由核心實現了,開發人員需要做的就是建立啟動...

QNX 上的多執行緒程式設計

在qnx 文字介面程式設計除了簡單的鍵盤輸入,控制台輸出以外,還有好多重要的知識點需要學習,包括多執行緒,執行緒同步,程序通訊,資源管理器 硬體驅動 等等。首先了解一下qnx環境下的多執行緒程式設計。qnx環境實現了多執行緒併發,多執行緒切換時的複雜處理已經由核心實現了,開發人員需要做的就是建立啟動...

Java執行緒的休眠

一 定義 執行緒休眠指的就是讓執行緒的執行速度稍微變慢一點。二 休眠方法 public static void sleep long mills throws interruptedexceptionpublic class mythread implements runnable catch in...