三种睡眠时间函数的区别:linux 的sleep()、usleep()、nanosleep()函数
生活随笔
收集整理的這篇文章主要介紹了
三种睡眠时间函数的区别:linux 的sleep()、usleep()、nanosleep()函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
三種睡眠時(shí)間函數(shù)的區(qū)別:linux 的sleep()、usleep()、nanosleep()函數(shù)
(1)sleep()-------以秒為單位
unsigned int sleep(unsigned int seconds);
sleep()非系統(tǒng)調(diào)用,sleep()是在庫(kù)函數(shù)中實(shí)現(xiàn)的,它是通過alarm()來設(shè)定報(bào)警時(shí)間,使用sigsuspend()將進(jìn)程掛起在信號(hào)SIGALARM上。
sleep()只能精確到秒級(jí)上。sleep()會(huì)令目前的進(jìn)程暫停,直到達(dá)到參數(shù)seconds 所指定的時(shí)間,或是被信號(hào)所中斷。
#include<unistd.h>
return:若進(jìn)程暫停到參數(shù)seconds 所指定的時(shí)間,成功則返回0,若有信號(hào)中斷則返回剩余秒數(shù)。
(2)usleep()----以微秒為單位
unsigned int usleep(unsigned int useconds);
除了時(shí)間單位為微秒以外,在使用上與sleep()差不多。還有就是實(shí)現(xiàn)也是不同的,sleep因?yàn)槭怯胊larm實(shí)現(xiàn)的,所以時(shí)間單位為s ,而usleep的時(shí)間單位為us
,那肯定不是由alarm實(shí)現(xiàn)的,所以說它們的實(shí)現(xiàn)不同,但都是linux用的,而window下不能用,因?yàn)槎际莝leep和usleep都是在unistd.h下定義的。
#include<unistd.h>
return:若進(jìn)程暫停到參數(shù)seconds 所指定的時(shí)間,成功則返回0,若有信號(hào)中斷則返回剩余微秒數(shù)。
(3)nanosleep( )---------以納秒為單位
struct timespec
?{
? time_t ?tv_sec; ? ? ? ? /* 秒seconds */
?long ? ?tv_nsec; ? ? ? ?/* 納秒nanoseconds */
?};
int nanosleep(const struct timespec *req, struct timespec *rem);
#include<time.h>
這個(gè)函數(shù)功能是暫停某個(gè)進(jìn)程直到你規(guī)定的時(shí)間后恢復(fù),參數(shù)req就是你要暫停的時(shí)間,其中req->tv_sec是以秒為單位,而tv_nsec以毫微秒為單位(10的-9次方秒)。由于調(diào)用nanosleep是是進(jìn)程進(jìn)入TASK_INTERRUPTIBLE,這種狀態(tài)是會(huì)相應(yīng)信號(hào)而進(jìn)入TASK_RUNNING狀態(tài)的,這就意味著有可能會(huì)沒有等到你規(guī)定的時(shí)間就因?yàn)槠渌盘?hào)而喚醒,此時(shí)函數(shù)返回-1,切還剩余的時(shí)間會(huì)被記錄在rem中。
return: 若進(jìn)程暫停到參數(shù)*req所指定的時(shí)間,成功則返回0,若有信號(hào)中斷則返回-1,并且將剩余微秒數(shù)記錄在*rem中。
注意:unistd.h 是 unix 系統(tǒng)標(biāo)準(zhǔn)頭文件,用于系統(tǒng)調(diào)用,相當(dāng)于win32中的windows.h,unistd.h 定義的函數(shù)只能用于UNIX環(huán)境中,而不能用于windows。所以sleep 和 usleep 只能用于linux下,而不能用于windows 。
nalosleep 和 其它時(shí)間日期操作函數(shù)一樣都是定義在time.h中的,所以都適用
(1)sleep()-------以秒為單位
unsigned int sleep(unsigned int seconds);
sleep()非系統(tǒng)調(diào)用,sleep()是在庫(kù)函數(shù)中實(shí)現(xiàn)的,它是通過alarm()來設(shè)定報(bào)警時(shí)間,使用sigsuspend()將進(jìn)程掛起在信號(hào)SIGALARM上。
sleep()只能精確到秒級(jí)上。sleep()會(huì)令目前的進(jìn)程暫停,直到達(dá)到參數(shù)seconds 所指定的時(shí)間,或是被信號(hào)所中斷。
#include<unistd.h>
return:若進(jìn)程暫停到參數(shù)seconds 所指定的時(shí)間,成功則返回0,若有信號(hào)中斷則返回剩余秒數(shù)。
(2)usleep()----以微秒為單位
unsigned int usleep(unsigned int useconds);
除了時(shí)間單位為微秒以外,在使用上與sleep()差不多。還有就是實(shí)現(xiàn)也是不同的,sleep因?yàn)槭怯胊larm實(shí)現(xiàn)的,所以時(shí)間單位為s ,而usleep的時(shí)間單位為us
,那肯定不是由alarm實(shí)現(xiàn)的,所以說它們的實(shí)現(xiàn)不同,但都是linux用的,而window下不能用,因?yàn)槎际莝leep和usleep都是在unistd.h下定義的。
#include<unistd.h>
return:若進(jìn)程暫停到參數(shù)seconds 所指定的時(shí)間,成功則返回0,若有信號(hào)中斷則返回剩余微秒數(shù)。
(3)nanosleep( )---------以納秒為單位
struct timespec
?{
? time_t ?tv_sec; ? ? ? ? /* 秒seconds */
?long ? ?tv_nsec; ? ? ? ?/* 納秒nanoseconds */
?};
int nanosleep(const struct timespec *req, struct timespec *rem);
#include<time.h>
這個(gè)函數(shù)功能是暫停某個(gè)進(jìn)程直到你規(guī)定的時(shí)間后恢復(fù),參數(shù)req就是你要暫停的時(shí)間,其中req->tv_sec是以秒為單位,而tv_nsec以毫微秒為單位(10的-9次方秒)。由于調(diào)用nanosleep是是進(jìn)程進(jìn)入TASK_INTERRUPTIBLE,這種狀態(tài)是會(huì)相應(yīng)信號(hào)而進(jìn)入TASK_RUNNING狀態(tài)的,這就意味著有可能會(huì)沒有等到你規(guī)定的時(shí)間就因?yàn)槠渌盘?hào)而喚醒,此時(shí)函數(shù)返回-1,切還剩余的時(shí)間會(huì)被記錄在rem中。
return: 若進(jìn)程暫停到參數(shù)*req所指定的時(shí)間,成功則返回0,若有信號(hào)中斷則返回-1,并且將剩余微秒數(shù)記錄在*rem中。
注意:unistd.h 是 unix 系統(tǒng)標(biāo)準(zhǔn)頭文件,用于系統(tǒng)調(diào)用,相當(dāng)于win32中的windows.h,unistd.h 定義的函數(shù)只能用于UNIX環(huán)境中,而不能用于windows。所以sleep 和 usleep 只能用于linux下,而不能用于windows 。
nalosleep 和 其它時(shí)間日期操作函數(shù)一樣都是定義在time.h中的,所以都適用
總結(jié)
以上是生活随笔為你收集整理的三种睡眠时间函数的区别:linux 的sleep()、usleep()、nanosleep()函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mbstowcs 和 wcstombs函
- 下一篇: Linux系统中的函数