原文地址: https://blog.csdn.net/weibo1230123/article/details/79139476
(1)sleep()-------以秒為單位
unsigned int sleep(unsigned int seconds);
sleep()非系統(tǒng)調(diào)用,sleep()是在庫函數(shù)中實現(xiàn)的,它是通過alarm()來設(shè)定報警時間,使用sigsuspend()將進程掛起在信號SIGALARM上。
sleep()只能精確到秒級上。sleep()會令目前的進程暫停,直到達到參數(shù)seconds 所指定的時間,或是被信號所中斷。
#include<unistd.h>
return:若進程暫停到參數(shù)seconds 所指定的時間,成功則返回0,若有信號中斷則返回剩余秒數(shù)。
(2)usleep()----以微秒為單位
unsigned int usleep(unsigned int useconds);
除了時間單位為微秒以外,在使用上與sleep()差不多。還有就是實現(xiàn)也是不同的,sleep因為是用alarm實現(xiàn)的,所以時間單位為s ,而usleep的時間單位為us
,那肯定不是由alarm實現(xiàn)的,所以說它們的實現(xiàn)不同,但都是linux用的,而window下不能用,因為都是sleep和usleep都是在unistd.h下定義的。
#include<unistd.h>
return:若進程暫停到參數(shù)seconds 所指定的時間,成功則返回0,若有信號中斷則返回剩余微秒數(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>
這個函數(shù)功能是暫停某個進程直到你規(guī)定的時間后恢復(fù),參數(shù)req就是你要暫停的時間,其中req->tv_sec是以秒為單位,而tv_nsec以毫微秒為單位(10的-9次方秒)。由于調(diào)用nanosleep是是進程進入TASK_INTERRUPTIBLE,這種狀態(tài)是會相應(yīng)信號而進入TASK_RUNNING狀態(tài)的,這就意味著有可能會沒有等到你規(guī)定的時間就因為其它信號而喚醒,此時函數(shù)返回-1,切還剩余的時間會被記錄在rem中。
return: 若進程暫停到參數(shù)req所指定的時間,成功則返回0,若有信號中斷則返回-1,并且將剩余微秒數(shù)記錄在rem中。
注意:
unistd.h 是 unix 系統(tǒng)標準頭文件,用于系統(tǒng)調(diào)用,相當(dāng)于win32中的windows.h,unistd.h 定義的函數(shù)只能用于UNIX環(huán)境中,而不能用于windows。所以sleep 和 usleep 只能用于linux下,而不能用于windows 。
nalosleep 和 其它時間日期操作函數(shù)一樣都是定義在time.h中的,所以都適用