基本知识

• linux中延时函数很简单,却经常用到
• 在操作系统中和单片机处理延时方式就完全不一样了,不可能是使用
for循环浪费系统资源。而是有专门的接口函数
• linux系统编程中常用的延时函数:
– sleep、usleep等
• linux内核中的常用的延时函数:
– ndelay、udelay、mdelay等

sleep是秒延时

unsigned int sleep(usngined int seconds);

-- 例如:sleep(1),即延时一秒

-- 返回值:无符号的整型数值,如果延时成功则返回0,如果延时过程中被打断,则返回剩余的秒数。

-- 例如:slepp(5),返回值是3,那么实际延时就是 5-3 = 2 秒

函数usleep是微秒延时

int usleep(useconds_t usec);

-- useconds 㤇小于1000000

-- 例如:usleep(10) ,表示延时10微秒

-- 延时成功则返回0,失败则返回-1

基本概念

• 什么是UTC 时间? 世界的统一时间
• 什么是UNIX 纪元时间? 在Unix下面1970年1月1日0时0分0秒,开始经过的秒数
• 什么是格林尼治标准时(GMT)时间? 太阳经过格林尼治时间
• 什么是机器日历时间
? UNIX纪元时间

时间调用

• 介绍如何获取机器时间
– 以秒为单位的时间
• 获取机器时间函数
• time_t time(time_t *t);
– 参数*t:以秒为单位的机器时间
– 返回值:如果参数为NULL,则返回机器时间;错误返回-1;
– time_t类型实际是一个long int类型
• 编写编译运行测试

#include <stdio.h>
#include <time.h> int main()
{
time_t timep; time(&timep);
printf("UTC time:0x%08x\n", timep); timep = time(NULL);
printf("UTC time:0x%08x\n", timep); return ;
}

时间转换

• 机器时间不是人类能够识别的,需要将机器时间转化为人民群众喜闻
乐见的年月日时分秒的形式
• tm结构体
– 包含tm_sec;tm_min;tm_hour;int tm_mday等等成员
– 函数ctime
• 将时间转化为字符串格式
• char *ctime(const time_t *timep);
• 将时间转化为格林威治时间
• struct tm *gmtime(const time_t *timep);

• 时间转换为字符格式,注意这个函数的参数是tm 结构的
• char *asctime(const struct tm *tm);
• 时间转化为本地时间
• struct tm *localtime(const time_t *clock);
• 需要注意的是,上面几个函数的参数和以及返回值是不同的
• 编写编译运行测试

#include <stdio.h>
#include <time.h> int main(void)
{
time_t timep;
struct tm *tblock;
time(&timep);
printf("ctime/timep is %s\n", ctime(&timep));
printf("asctime is %s\n", asctime(gmtime(&timep))); tblock = localtime(&timep);
printf("localtime is :%s\n", asctime(tblock));
printf("localtime is :%s\n", ctime(&timep)); return ;
}

高精度时间函数

• 高精度的设置时间函数和读取时间函数
• int gettimeofday(struct timeval *tv, struct timezone *tz);
• int settimeofday(const struct timeval *tv, const struct timezone
*tz);
– 参数tv:用于保存获取的时间
– 参数tz:可以缺省,传入NULL
– 上面的函数比time要高6个数量级,可以达到微妙,这个精度就可以粗略
的计算代码执行时间了

#include <time.h>
#include <sys/time.h> void function()
{
unsigned int i, j;
double y;
for(i=;i<;i++)
for(j=;j<;j++)
y=i/(j+);
} int main(void)
{
struct timeval tpstart, tpend;
float timeuse; gettimeofday(&tpstart, NULL);
function();
gettimeofday(&tpend, NULL); timeuse = *(tpend.tv_sec - tpstart.tv_sec)+
tpend.tv_usec - tpstart.tv_usec;
timeuse /= ; printf("Used Time:%f\n", timeuse); return ;
}

4412 linux延时和时间的更多相关文章

  1. (笔记)Linux延时及时间函数总结

    一. 基础知识1.时间类型.Linux下常用的时间类型有4个:time_t,struct timeval,struct timespec,struct tm.(1)time_t是一个长整型,一般用来表 ...

  2. Linux下长时间ping网络加时间戳并记录到文本

    Linux下长时间ping网络加时间戳并记录到文本   由于一些原因,比如需要检查网络之间是否存在掉包等问题,会长时间去ping一个地址,由于会输出大量的信息而且最好要有时间戳,因此我们可以使用简单的 ...

  3. 查看修改Linux时区和时间

    查看/修改Linux时区和时间 一.时区 1. 查看当前时区 date -R 2. 修改设置时区 方法(1) tzselect 方法(2) 仅限于RedHat Linux 和 CentOS timec ...

  4. 如何查看、修改Linux的系统时间

    如题: 如何修改Linux的系统时间? date -s 05/27/2011 date -s 10:24:00 clock -w 就这三条命令就OK了! 查看/修改Linux时区和时间 一.时区 1. ...

  5. linux与php时间函数有关的错误解决

    最近在程序里写了不少获取时间或时间戳的函数date() strtotime()等,但是把程序拿到linux上运行却爆出这些函数的错误,具体原因是因为linux本身的时间设置以及php的时区问题. 先确 ...

  6. Linux中表示“时间”的结构体和相关函数

    转载于:http://blog.chinaunix.net/uid-25909722-id-2827364.html      Linux中表示“时间”的结构体和相关函数 2011-09-13 17: ...

  7. Windows与Linux/Mac系统时间不一致的解决方法

    Windows与Linux/Mac系统时间不一致的解决方法 分类: linux2012-02-12 14:25 1691人阅读 评论(1) 收藏 举报 windowsubuntusystemlinux ...

  8. linux概念之时间与时区

    http://www.cnblogs.com/liuyou/archive/2012/07/29/2614338.html Linux时间基准 以上我们了解了RTC(实时时钟.硬件时钟)和OS时钟(系 ...

  9. 小凡的Linux主机与时间服务器同步记录

    小凡的Linux主机与时间服务器同步记录 导读 我们新安装的Linux主机,如果没有做与互联网服务器时间同步的处理的话,当我们使用date命令的时候,我们就看不到当前的时间,只能看到过去的时间.在我们 ...

随机推荐

  1. 使用sqlalchemy创建单条数据-分层管理代码

    这里主要是如何把整个流程的代码分层管理,方便维护 不拆分层次,整个流程顺下来的代码看这里:sqlAlchemy基本使用 项目结构: model.py用来描述表结构: from sqlalchemy i ...

  2. RESTful再理解

    目录 目录 前言 RESTful的目的 REST的含义 表现层 状态转化 无状态协议HTTP 最后 前言 这是在经过一段时间的积累后,对RESTFul框架的再一次更深入的理解.希望能够将零散的知识点连 ...

  3. hdu6228Tree

    Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...

  4. poj1742Coins(多重背包)

    People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony ...

  5. selenium python 报错“ unable to find binary in default location”

    selenium python 报错如下: raise exception_class(message, screen, stacktrace)selenium.common.exceptions.W ...

  6. 工厂模式vs简单工厂

    前言 工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断 ...

  7. ecshop 广告调用的几种方式

    1,ECSHOP后台设置广告更换 前台调用 {insert name='ads' id=2 num=1} id值表达广告位置的id.num表示数量 2,在代码加函数 function getads($ ...

  8. 自己做的html5手机站点

    这个站点採用html5+css3+jquerymobile 仅仅开发了前台的功能,前台的界面比較美观,后端不方便放上,各位有空能够自己开发这个站点的界面有參考各个菜谱站点的页面的样式,可是又不一样,是 ...

  9. C# json格式的序列化与反序列化

    使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象 Json[javascript对象表示方法],它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易 ...

  10. vue 页面切换从右侧切入效果

    1.将切换的页面用transition包裹 <div class="index-content"> <transition> <router-view ...