轉
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...