第六章 訊號 函式sleep

2021-10-10 17:52:47 字數 2832 閱讀 6373

該函式用於讓呼叫程序掛起,直到

➢ 已經過了指定的時間,或者

➢ 呼叫程序捕捉到乙個訊號,並從訊號處理程式返回

#include unsigned int sleep(unsigned int seconds);
返回值:

➢ 若已經過了指定的時間,則返回0

➢ 若呼叫程序捕捉到乙個訊號,並從訊號處理程式返回,則sleep提前返回,返回值是未睡夠的秒數

從結果可以分析出,鍵入中斷鍵後,訊號函式**獲,程式從睡眠中返回,直接執行sleep的下一條語句。

➢ solaris 9使用alarm實現sleep函式

對於問題1

➢ 檢查第一次呼叫alarm的返回值,若其小於本次呼叫alarm的引數值,則只應等到上次設定的計時器超時;

➢ 若上次設定的計時器超時時間晚於本次設定值,則在sleep1函式返回前,復位此計時器,使其在上次計時器的設定時間再次發生超時

對於問題2

➢ 儲存signal函式的返回值,在返回前復位原配置

對於問題3

➢ 可以使用setjmp,或者

➢ sigprocmask、sigsuspend

針對第三個問題的解決方案(alarm和pause之前會存在競爭。具體來說就是,在乙個繁忙的系統中,可能執行了alarm之後就切換到其他程序了。可能要在alarm超時之後才呼叫到pause,那pause不就死定了嗎?)

上述程式執行後,立即鍵入ctrl+c 程式輸出

sig_int strarting

sleep2 returned: 0

因為sigint的處理並未結束,就被longjmp中斷了

➢ freebsd、linux使用nanosleep提供時間延遲

nanosleep函式

該函式掛起呼叫者執行緒,直到超時或者接收到訊號

#include int nanosleep(const struct timespec* rqtp,  struct timespec* rmtp);

timespec結構體

第六章函式

第六章 函式 重要知識點 1 函式定義的語法形式 資料型別 函式名 形式參數列 關於函式的定義有如下說明。函式的資料型別是函式的返回值型別 若資料型別為void,則無返回值 函式名是識別符號,乙個程式中除了主函式名必須為main外,其餘函式的名字按照識別符號的取名規則可以任意選取。形式引數 簡稱形參...

第六章 函式

示例 使用函式列印菱形 include intprint star int main intprint star int i,j for i 0 i 4 i 定義無參函式 函式名後面的括號中是空的,沒有任何引數,定義無參函式的一般形式為 型別名 函式名 或 型別名 函式名 void 函式體包括宣告部...

c 第六章函式

基礎知識總結 一 函式定義 c 程式的典型結構 第1部分 預處理指令 符號常量定義 函式宣告 第2部分 主函式 第2部分 函式定義 函式定義的形式 資料型別 函式名 形式參數列 函式體 執行語句 注 1 資料型別是函式的返回值型別,若資料型別為void,則無返回值。2 形式參數列可以是空的 即無參函...