sleep()是以秒为单位的

sleep(100);即程序在此停留100s

usleep()是以微秒级别为单位的

usleep(100);即程序在此停留100us

#include <time.h>
#include <stdio.h>
#include <iostream>
#include <unistd.h>using namespace std;
int main(int argc, char *argv[]){int sleep_time = 100;cout << "sleep before time: " << time(NULL) << endl;sleep(sleep_time);cout << "sleep after time: " << time(NULL) << endl;cout << "======================" << endl;cout << "usleep before time: " << time(NULL) << endl;usleep(sleep_time);cout << "usleep after time: " << time(NULL) << endl;
}#################################################################################
sleep before time: 1560257692
sleep after time: 1560257792
======================
usleep before time: 1560257792
usleep after time: 1560257792

从运行结果来看,sleep()方法执行前后的时间戳相减正好是sleep_time大小,打印的时间戳是以秒为单位的,所以sleep()方法将程序挂起使用的单位是秒级别的;从usleep()执行前后的时间戳来看,感觉上程序并没有被挂起,这是因为usleep()方法将程序挂起的使用的单位是微秒级别的(1,000,000 微秒 = 1秒)所以程序看起来并没有被挂起,下面我们将打印的时间戳改为微秒级别的看看。
可以通过<sys/time.h>库中的gettimeofday()方法来拿到当前系统的微秒级别时间。

#include <stdio.h>
#include <iostream>
#include <unistd.h>
#include <sys/time.h>using namespace std;
int main(int argc, char *argv[]){int sleep_time = 100;cout << "sleep before time: " << time(NULL) << endl;sleep(sleep_time);cout << "sleep after time: " << time(NULL) << endl;cout << "======================" << endl;cout << "usleep before time: " << time(NULL) << endl;usleep(sleep_time);cout << "usleep after time: " << time(NULL) << endl;cout << "======================" << endl;struct timeval tv;  gettimeofday(&tv,NULL); cout << "not usleep before time: " << tv.tv_sec<<"s,"<<tv.tv_usec<<"微秒"<<endl;usleep(0);gettimeofday(&tv,NULL); cout << "not usleep after time: " << tv.tv_sec<<"s,"<<tv.tv_usec<<"微秒"<<endl;cout << "======================" << endl;gettimeofday(&tv,NULL); cout << "usleep before time: " << tv.tv_sec<<"s,"<<tv.tv_usec<<"微秒"<<endl;usleep(sleep_time);gettimeofday(&tv,NULL); cout << "usleep after time: " << tv.tv_sec<<"s,"<<tv.tv_usec<<"微秒"<<endl;
}######################################################################################sleep before time: 1560260201
sleep after time: 1560260301
======================
usleep before time: 1560260301
usleep after time: 1560260301
======================
not usleep before time: 1560260301s,491772微秒
not usleep after time: 1560260301s,491948微秒
======================
usleep before time: 1560260301s,491962微秒
usleep after time: 1560260301s,492191微秒

从使用usleep(0)和使用了usleep(100)方法来看,执行前后的时间差差不多相差100,从而可以看出usleep()是以微秒级别为单位的。

Linux sleep和 usleep睡眠函数的使用相关推荐

  1. linux内核中的睡眠函数*delay、*sleep

    目录 一.睡眠函数种类 1.原子上下文 2.非原子上下文 二.使用环境 1.使用环境的不同,选择不同的延时 2.驱动机制不同 3.内核中的计算函数执行的函数 三.实测两类函数的延时以及原因 1.测试系 ...

  2. Linux Shell中的延时函数

    Linux Shell中的延时函数 在 linux shell 脚本中经常需要做一些延时处理. 所以经常要用到 sleep 或 usleep 函数. 下面来说一下  sleep 和 usleep 的区 ...

  3. Android/linux(earlysuspend、lateresume)睡眠唤醒机制简

    来源处 http://blog.sina.com.cn/s/blog_759dc36b0100stax.html 背景介绍: 睡眠/唤醒是嵌入式Linux非常重要的组成部分,因为优秀的睡眠唤醒机制可以 ...

  4. Linux 基础知识(2)---Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别

    Linux内核空间内存申请函数kmalloc.kzalloc.vmalloc的区别 kzalloc与kmalloc区别    这个函数就是原来的两个函数的整合 , 即原来我们每次申请内存的时候都会这么 ...

  5. linux进程睡眠编程,linux内核编程-可睡眠锁之SRCU

    linux内核编程-可睡眠锁之SRCU DEFINE_SRCU DEFINE_SRCU_STATIC static修饰的定义只能在该c文件中使用,用于保护命名空间. 如果一个函数里面使用了static ...

  6. Linux下的内存对齐函数

    在Linux下内存对齐的函数包括posix_memalign, aligned_alloc, memalign, valloc, pvalloc,其各个函数的声明如下: int posix_memal ...

  7. linux kbhit扫描键盘,(转)检测按键(Linux中kbhit()函数的实现)

    http://hi.baidu.com/jtntiivtemcnsue/item/90689ce172ee912c5a7cfb1b 编写过MS-DOS程序的人通常都会查找Linux下等同于kbhit的 ...

  8. linux启动程序api编程,Linux编程中关于API函数与系统调用间关系

    用户态xyz()函数,内核最终一般会调用形如sys_xyz()的服务例程来处理(不过也有一些例外,这里暂时不考虑) 函数xyz()是直接提供给用户编程使用的.图中"SYSCALL" ...

  9. Linux 编程中的API函数和系统调用的关系【转】

    转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...

最新文章

  1. php转java知乎_php程序员来谈谈php和java
  2. UltraEdit中高亮显示verilog HDL关键词
  3. 毕设题目:Matlab机器人路径规划
  4. WPF 做的天干地支 乾坤八卦 罗盘
  5. did拼接屏最小拼缝0.88mm
  6. 斯坦福课程Knowledge Graphs-What is a Knowledge Graph?
  7. arm怎么运行python_给arm板编译移植python(一)
  8. lintcode 输出赛程表
  9. 快速识别台式机的内存条
  10. endcap和welltap_ICC布局规划
  11. 第一期:[开眼界] Android P预览版都有哪些设计新鲜事
  12. 大数据技术原理与应用之【云数据库】习题
  13. Excel中将人民币金额小写转成大写(转)
  14. C语言没学好,C++听不懂,怎么办?
  15. linux卸载informatica,Informatica在linux下安装搭建
  16. 【击穿、穿透、雪崩】
  17. jupyter安装php,如何安装jupyter
  18. cocos2d-x 使用位图工具BMFont自定义字体 fnt
  19. 机器学习强基计划2-2:一文详解ID3、C4.5、CART决策树算法+ Python实现
  20. 前景提取 matlab,基于MATLAB的动态前景目标特征提取与运动跟踪

热门文章

  1. 数据结构 - 二叉树的遍历
  2. java左侧栏怎么打开_eclipse左侧项目栏不见了怎么解决
  3. strongswan简单介绍
  4. 复制文件或文件夹时出错---未指定的错误
  5. 好程序员云计算培训分享2020年云计算的发展趋势
  6. 腾讯视频web端如何去水印?学会这招你想去啥就去啥
  7. Qt编写物联网管理平台46-云端数据同步
  8. Ubuntu18.04使用Systemback制作系统镜像并还原(亲测)
  9. 出现AttributeError: module ‘selenium.webdriver‘ has no attribute ‘PhantomJS异常的解决方法
  10. 锁定文件失败,打不开磁盘或它所依赖的某个快照磁盘