Linux中用的是时间片轮转算法,进程轮训要消耗时间,转换到一个进程来执行要消耗时间。结果在进程睡眠和运行过程中,许多时间已经过去了。

sleep()是以秒为单位的,要想延迟一个较小的时间,就需要用到usleep()。

另外还有个nanosleep(),用法好像很复杂。

usleep可能很难保证时间精度。我写了一段测试代码

#include

#include

#include

intmain(void)

{

inti;

structtimeval tvTotal;

structtimeval tvBegin, tvEnd, tvSub;

tvTotal.tv_sec = 0;

tvTotal.tv_usec = 0;

for(i = 0; i

{

gettimeofday(&tvBegin, NULL);

usleep(1000);// 1000 us(microsecond/微秒) = 1 ms(毫秒)

gettimeofday(&tvEnd, NULL);

timersub(&tvEnd, &tvBegin, &tvSub);

tvTotal.tv_sec += tvSub.tv_sec;

tvTotal.tv_usec += tvSub.tv_usec;

printf("%d\n", tvSub.tv_usec);

}

printf("try to usleep 1000 us 100 times, average of result is: %ld\n", tvTotal.tv_sec*1000*10+tvTotal.tv_usec/100);

return0;

}

在虚拟机上运行的结果,证实偏差很大:

[root@localhost ~]# ./test

1118

1700

1855

3428

2148

3097

1347

1339

1800

1837

4322

4228

8866

1343

1902

1816

2353

1238

2065

1347

1775

1717

1924

2142

3011

1945

3078

6542

1918

2647

1780

2507

2447

4542

3574

8839

2014

1503

1240

1844

1993

1903

1936

1498

1798

1357

2882

7804

1234

1323

2404

1410

1972

1909

2066

1901

1371

2113

1477

1477

1403

6248

1691

2539

2005

1303

1940

1975

1983

2167

2021

1484

1460

2364

5229

1890

1193

2132

1894

1876

1973

2120

1844

1949

1407

1727

2186

1872

1900

7160

1703

1971

1243

1495

1861

2017

1223

1125

1733

1498

try to usleep 1000 us 100 times, average of result is: 2327

抖动非常厉害。

明天找个arm板在测测看看。

linux内核usleep,Linux下的usleep函数相关推荐

  1. 蜗蜗 Linux内核芬妮下,Linux内核的整体架构

    作者:蜗蜗 发布于:2014-2-21 13:23 分类:Linux内核分析 1. 前言 本文是"Linux内核分析"系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内 ...

  2. linux 内核 面试,LINUX内核经典面试题

    4) 用户进程间通信主要哪几种方式?5) 通过伙伴系统申请内核内存的函数有哪些?6) 通过slab分配器申请内核内存的函数有?7) Linux的内核空间和用户空间是如何划分的(以32位系统为例)?8) ...

  3. 国嵌linux内核编程,linux内核--那些年看国嵌视频学习

    1.linux系统构成 由用户空间和内核空间构成.其中用户空间由应用程序和C库:内核空间由系统调用接口.kernel.架构代码.硬件设备平台 为什么linux系统会被划分为用户空间和内核空间?处于安全 ...

  4. 一文看懂Linux内核!Linux内核架构和工作原理详解

    linux内核相关视频解析: 5个方面分析linux内核架构,让你对内核不再陌生 90分钟了解Linux内存架构,numa的优势,slab的实现,vmalloc的原理 手把手带你实现一个Linux内核 ...

  5. 【Linux内核】Linux内核介绍

    Linux学习内核思路 学习过程: Linux内核引导及如何初始化 进程管理.内存管理 内核引导及过程: CPU通电后,首先执行引导程序,引导程序把内核加载到**内存,**然后执行内核,内核初始化完成 ...

  6. 深度:一文看懂Linux内核!Linux内核架构和工作原理详解

    简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址.目前支持模块的动态装卸(裁剪).Linux内核就是基于这个策略实现的.Linux进程1.采用层次结构,每个 ...

  7. 【Linux 内核】Linux 内核源码目录说明 ① ( arch 目录 | block 目录 | certs 目录 | crypto 目录 | Documentation 目录 )

    文章目录 一.arch 目录 二.block 目录 三.certs 目录 四.crypto 目录 五.Documentation 目录 在上一篇博客 [Linux 内核]Linux 内核源码结构 ( ...

  8. 【Linux 内核】Linux 操作系统结构 ( Linux 内核在操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

    文章目录 一.Linux 内核在操作系统中的层级 二.Linux 内核子系统 三.Linux 内核子系统之间的关系 一.Linux 内核在操作系统中的层级 Linux 内核 所在层级 : 整个计算机系 ...

  9. 深入理解Linux内核 学习Linux内核的一些建议及书记推荐

    深入理解Linux内核 学习Linux内核的一些建议_华清远见教育集团 经典书籍 待到山花烂漫时,还是那些经典在微笑. 有关内核的书籍可以用汗牛充栋来形容,不过只有一些经典的神作经住了考验.首先是5本 ...

  10. 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )

    文章目录 一.Linux 内核特性 1.Linux 内核组织形式 2.Linux 进程调度 3.Linux 内核线程 4.Linux 内核多平台虚拟内存管理 5.Linux 虚拟文件系统 6.Linu ...

最新文章

  1. ajax csv写文件内容,接收.csv文件作为ajax成功函数中的数据
  2. [视频]用SQL Server Compact创建简单的Windows应用程序
  3. openstack的云主机相关命令
  4. sqlserver 改变编码格式_PR基础教程 | Day7:导出及格式讲解
  5. 包头轻工计算机工程学院,包头轻工职业技术学院高职招生
  6. canoco5冗余分析步骤_打造高性能的大数据分析平台
  7. Git 初学札记(十)—— Reset 回退的三种状态解析
  8. 查找链表中倒数第k个结点(C++)
  9. 随想录(windows和linux进行socket通信)
  10. 英特尔回应杨笠代言争议;天弘基金称已处理在支付宝上「无故扣款」问题;Eclipse 4.19 发布 | 极客头条...
  11. 访问自己的网站有病毒提示,为什么?
  12. WORD里表格复制到另一WORD里表格会变形的解决办法
  13. 【毕业设计】翻译词霸的实现
  14. 负数除以整数的余数怎么算?
  15. 各大银行网银转账手续费一览表
  16. HTML5超简单的日期时间控件
  17. matplotlib之网格线
  18. PHP系统常量及判断某常量是否被定义
  19. 如何更清楚的购买自己需要的电脑——配置篇
  20. i3 10100f和i5 9600kf 哪个好

热门文章

  1. php常用系统函数库,PHP常用函数大全
  2. 【网站密码管理不用愁】基础篇 • 利用selenium构建网站密码管理和自动登录神器
  3. 浅析语音对讲功能在车载监控系统中的应用意义
  4. python 声音基频f0_ASR中常用的语音特征之FBank和MFCC(原理 + Python实现)
  5. 关于禁止html缓存
  6. 嵌入式优秀资源网址整理
  7. JAVA的内存回收机制(快速入门版)
  8. Python+OpenCV图像处理与识别 Step by Step
  9. Quartus生成原理图
  10. 云服务器 文件管理,云服务器文件管理工具