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