必威体育Betway必威体育官网
当前位置:首页 > IT技术

linux 的sleep()、usleep()、nanosleep()函数的区别

时间:2019-10-27 10:43:26来源:IT技术作者:seo实验室小编阅读:75次「手机版」
 

nanosleep

其它时间、日期操作函数:http://blog.csdn.net/u011170660/article/details/38318765

一下三种睡眠时间函数的区别:

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 。

          nalosleep 和 其它时间日期操作函数一样都是定义在time.h中的,所以都适用。

文章最后发布于: 2014-08-15 17:09:10

相关阅读

strcmp函数的分析及实现

函数原型: int strcmp(const char *string1,const char *string2) 所在库文件: #include<string.h> 参数: 以null结尾的字符串

提升进程权限-OpenProcessToken等函数的用法

提升进程权限-OpenProcessToken等函数的用法 GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄 Lo

关于Java中map函数的使用

3 import java.util.HashMap; 4 import java.util.Map; 5 6 //map使用方法 7 public class MapDemo { 8 9 public

Linux(Centos7)下,阿帕奇(Apache)服务器的安装与配置

Y6   Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用

linux网络命令行-持续更新

1 网口ip配置及激活【命令行】 sudo ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up 2 网口配置【配置文件】 Linux里面

分享到:

栏目导航

推荐阅读

热门阅读