linux 的sleep()、usleep()、nanosleep()函数的区别
2017-11-29 14:08
537 查看
sleep()-------以秒为单位
unsigned int sleep(unsigned int seconds);
sleep()非系统调用,sleep()是在库函数中实现的,它是通过alarm()来设定报警时间,使用sigsuspend()将进程挂起在信号SIGALARM上。
sleep()只能精确到秒级上。sleep()会令目前的进程暂停,直到达到参数seconds
所指定的时间,或是被信号所中断。
#include<unistd.h>
return:若进程暂停到参数seconds 所指定的时间,成功则返回0,若有信号中断则返回剩余秒数。
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,若有信号中断则返回剩余微秒数。
nanosleep( )---------以纳秒为单位
struct timespec
{
time_t tv_sec; /* 秒seconds */
long tv_nsec; /* 纳秒nanoseconds */
};
int nanosleep(const struct timespec *req, struct timespec *rem);
#include<time.h>
这个函数功能是暂停某个进程直到你规定的时间后恢复,参数req就是你要暂停的时间,其中req->tv_sec是以秒为单位,而tv_nsec以毫微秒为单位(10的-9次方秒)。由于调用nanosleep是是进程进入TASK_INTERRUPTIBLE,这种状态是会相应信号而进入TASK_RUNNING状态的,这就意味着有可能会没有等到你规定的时间就因为其它信号而唤醒,此时函数返回-1,切还剩余的时间会被记录在rem中。
return: 若进程暂停到参数*req所指定的时间,成功则返回0,若有信号中断则返回-1,并且将剩余微秒数记录在*rem中。
注意:unistd.h
是 unix 系统标准头文件,用于系统调用,相当于win32中的windows.h,unistd.h 定义的函数只能用于UNIX环境 中,而不能用于windows。所以sleep 和 usleep 只能用于linux下,而不能用于windows 。
unsigned int sleep(unsigned int seconds);
sleep()非系统调用,sleep()是在库函数中实现的,它是通过alarm()来设定报警时间,使用sigsuspend()将进程挂起在信号SIGALARM上。
sleep()只能精确到秒级上。sleep()会令目前的进程暂停,直到达到参数seconds
所指定的时间,或是被信号所中断。
#include<unistd.h>
return:若进程暂停到参数seconds 所指定的时间,成功则返回0,若有信号中断则返回剩余秒数。
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,若有信号中断则返回剩余微秒数。
nanosleep( )---------以纳秒为单位
struct timespec
{
time_t tv_sec; /* 秒seconds */
long tv_nsec; /* 纳秒nanoseconds */
};
int nanosleep(const struct timespec *req, struct timespec *rem);
#include<time.h>
这个函数功能是暂停某个进程直到你规定的时间后恢复,参数req就是你要暂停的时间,其中req->tv_sec是以秒为单位,而tv_nsec以毫微秒为单位(10的-9次方秒)。由于调用nanosleep是是进程进入TASK_INTERRUPTIBLE,这种状态是会相应信号而进入TASK_RUNNING状态的,这就意味着有可能会没有等到你规定的时间就因为其它信号而唤醒,此时函数返回-1,切还剩余的时间会被记录在rem中。
return: 若进程暂停到参数*req所指定的时间,成功则返回0,若有信号中断则返回-1,并且将剩余微秒数记录在*rem中。
注意:unistd.h
是 unix 系统标准头文件,用于系统调用,相当于win32中的windows.h,unistd.h 定义的函数只能用于UNIX环境 中,而不能用于windows。所以sleep 和 usleep 只能用于linux下,而不能用于windows 。
相关文章推荐
- linux 的sleep()、usleep()、nanosleep()函数的区别
- 三种睡眠时间函数的区别:linux 的sleep()、usleep()、nanosleep()函数
- linux中sleep()和usleep()函数的使用和区别
- Linux 高精確的時序(sleep, usleep,nanosleep)
- linux的sleep()和usleep()的使用和区别
- Linux的sleep()和usleep()的使用和区别
- php--------暂停函数 sleep() 与 usleep() 的区别
- 十九、Linux系统编程-信号(六)三种不同精度的睡眠sleep、usleep、nanosleep
- 关于Linux的线程休眠函数sleep/usleep/nanosleep/select
- Linux 高精確的時序(sleep, usleep,nanosleep)[转]
- Linux高精确的时序(sleep, usleep,nanosleep)
- Linux平台延时之sleep、usleep、nanosleep、select比较
- Linux的sleep()和usleep()的使用和区别
- Linux的sleep()和usleep()的使用和区别
- PHP 暂停函数 sleep() 与 usleep() 的秒与微秒区别
- linux的sleep()和usleep()的使用和区别
- Linux 高精確的時序(sleep, usleep,nanosleep) from:http://blog.sina.com.cn/s/blog_533ab41c0100htae.html
- PHP 暂停函数 sleep() 与 usleep() 的区别
- linux下的sleep()和usleep()的使用和区别
- Linux的sleep()和usleep()的使用和区别