C語言 sleep wait 函式 區別

2021-06-07 04:27:12 字數 1512 閱讀 9596

c 語言中可用 sleep() 函式實現休眠,具體如下:

#include  

(1) mfc中的sleep函式原型:

void

sleep

(dword dwmilliseconds)

;//微秒

(2) linux下的sleep函式原型:

unsigned

intsleep

(unsigned

int seconds)

;//秒

其中mfc中的是單位是微秒,要包含標頭檔案 ,且 sleep 中的字母 s 一定要大寫;linux下的是秒。

其它相關函式:

linux下用微秒的執行緒休眠函式:

void

usleep

(unsigned

long usec)

;

int

usleep

(unsigned

long usec)

;/* susv2 */

也可用select函式+timeval結構(精確到微秒)或用pselect函式+timespec(精確到納秒) 。

** sleep與wait區別:

1.sleep就是休眠指定的時間,到時間後繼續往下執行;

wait是等待,需要被觸發才能繼續往下執行。

2.man 2 wait

看幫助文件

wait是針對程序,如果乙個子程序有多個執行緒,那麼在最後乙個結束時,其parent才能wait返回。

不同觀點:

wait()函式一般用在多程序中,如果乙個父程序fork了乙個或幾個子程序,當乙個或多個子程序終止時,父程序則使用wait()函式來獲取已經終止子程序的狀態,釋放子程序占用的系統資源,避免產生殭屍程序;這個一般是必需的;

呼叫wait()函式會產生一下幾種情況:

a:如果呼叫此函式的程序沒有子程序,則立即出錯返回;

b:如果呼叫此函式的程序的所有子程序都在執行,則阻塞;

c:此點最重要:在呼叫此函式的程序的所有子程序中,如果有其中乙個子程序終止,則wait()函式取得該子程序的狀態後會立即返回;而並非只是最後乙個子程序結束時wait()函式才能返回。所以有多個程序的話,需要多次呼叫wait()函式才能避免殭屍程序。

其實在實際程式中,一般用使用waitpid()代替wait(),因為waitpid()可以不阻塞;另外如果有多子程序一起結束,一起產生幾個sigchld訊號,因為訊號是不排隊的,是會丟失的,所以可能導致父程序只會呼叫一次wait(),只能獲取其中乙個已結束的子程序的狀態,其它的幾個已經結束的子程序可能就會變成殭屍程序;鑑於以上兩種原因:一般在在程式中使用while((pid=waitpid(-1,null,wnohong)) >0 )來代替wait()。

3.單從名字理解是不容易。

簡單點:

sleep是自己睡。

wait是等別人。

C語言strlen函式和sizeof的區別

c語言字串的兩種計算長度的方式,事實上兩者有許多不同,我們可以來 一下。sizeof sizeof 運算元所佔空間的位元組數大小 是一種c中的基本運算子。可以以型別 指標 陣列和函式等作為引數。頭檔案型別為unsigned int。運算值在編譯的時候就出結果,所以可以用來定義陣列維數。include...

C語言快取區詳解

緩衝區又稱為快取,它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做 緩衝區。緩衝區根據其對應的是輸入裝置還是輸出裝置,分為輸入緩衝區和輸出緩衝區。比如我們從磁碟裡取資訊,我們先把讀出的資料放在緩衝區,計算機再直接從緩衝...

C語言記憶體區概述

在c c 中,記憶體分成5個區 堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧 由編譯器在需要的時候分配,在不需要的時候就會自動清除的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。堆 由new分配的記憶體塊,這些的釋放編譯器不會去管,由應用程式去控制,一般乙個new就要對應乙個del...