該函式用於讓呼叫程序掛起,直到
➢ 已經過了指定的時間,或者
➢ 呼叫程序捕捉到乙個訊號,並從訊號處理程式返回
#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 形式參數列可以是空的 即無參函...