资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

linux毫秒精度命令,linux 精确延时

unix下获取精确到毫秒的系统的时间

C语言如何获得精确到毫秒的时间

成都创新互联专注于曲江企业网站建设,响应式网站,商城开发。曲江网站建设公司,为曲江等地区提供建站服务。全流程按需网站建设,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务

在做测试或性能优化时,经常要知道程序运行的时间,在Linux系统可以使用time命令来计算程序运行运行所消耗的时间,能精确到毫秒,如果要精确到代码块或某个操作运行时所消耗的时间,time命令就不给力了。如果对时间的精度要求不高的话,可以调用标准C的接口time来得到开始和结束的时间,再调用difftime接口来计算时间差,精度是秒,代码如下所示:

time.c

如果要让程序休眠3秒,Windows使用Sleep(3000),Linux使用sleep(3),即Windows的Sleep接口的参数的单位是毫秒,Linux的sleep接口的参数的单位是秒。 如果需要精确到毫秒,以上程序就发挥不了作用,如果在Java要达到这要求就很简单了,代码如下所示:

Time.java

通过Google找了一些资料后,发现C语言里没有标准的接口可以获得精确到毫秒的时间,都会调用到与操作系统相关的API,下面会分别介绍在Linux和Windows系统下的多种实现方法,希望对大家有帮助。

使用gettimeofday接口:

gettimeofday.c

gettimeofday能得到微秒数,比毫秒还要更精确。

使用ftime接口:

ftime.c

使用GetTickCount接口:

下载:

GetTickCount.c

Windows系统下有些编译器使用printf输出64位整数参数要使用%I64d,比如VC。

使用QueryPerformanceX接口:

QueryPerformance.c

使用GetSystemTime接口:

GetSystemTime.c

这种方法没给出计算时间差的实现,只给出如何用GetSystemTime调用得到当前时间,计算时间差比较简单,根据年、月、日、时、分秒和毫秒计算出一个整数,再将两整数相减即可。

以上是通过Google找到一些用C语言获得精确到毫秒的实现方法,对比Linux和Windows的方法,发现两个系统的API命名很不一样,Linux接口名要么都是小写要么使用下划线(_)来分隔单词,而Windows接口名中的单词首字母大写。

shell获取时间精确到毫秒级别是哪个命令

1、首先打开代码编辑器。选择bash脚本语言。

2、然后输入current_time=$(date  "+%Y%m%d-%H%M%S)后面的有百分号的一串是格式控制,意思是按年月日,时分秒的格式存入current_time变量中。

3、然后输入 echo ${current_time}这里的意思是在终端显示current_time变量的内容。

4、然后保存为test.sh。

5、然后在终端输入 chmod +x test.sh为文件夹执行权限。

6、最后输入./test.sh进行执行,文件成功输出时间。

怎样在Linux下实现精确定时器

linux下使用select实现精确定时器

在编写程序时,我们经常回用到定时器。本文讲述如何使用select实现超级时钟。使用select函数,我们能实现微妙级别精度的定时器。同时,select函数也是我们在编写非阻塞程序时经常用到的一个函数。

首先看看select函数原型如下:

int select(int nfds, fd_set *readfds, fd_set *writefds,

fd_set *exceptfds, struct timeval *timeout);

参数说明:

slect的第一个参数nfds为fdset集合中最大描述符值加1,fdset是一个位数组,其大小限制为__FD_SETSIZE(1024),位数组的每一位代表其对应的描述符是否需要被检查。

select的第二三四个参数表示需要关注读、写、错误事件的文件描述符位数组,这些参数既是输入参数也是输出参数,可能会被内核修改用于标示哪些描述符上发生了关注的事件。所以每次调用select前都需重新初始化fdset。

timeout参数为超时时间,该结构会被内核修改,其值为超时剩余的时间。

利用select实现定时器,需要利用其timeout参数,注意到:

1)select函数使用了一个结构体timeval作为其参数。

2)select函数会更新timeval的值,timeval保持的值为剩余时间。

如果我们指定了参数timeval的值,而将其他参数都置为0或者NULL,那么在时间耗尽后,select函数便返回,基于这一点,我们可以利用select实现精确定时。

timeval的结构如下:

struct timeval{

long tv_sec;/*secons*

long tv_usec;/*microseconds*/

}

我们可以看出其精确到microseconds也即微妙。

一、秒级定时器

void seconds_sleep(unsigned seconds){

struct timeval tv;

tv.tv_sec=seconds;

tv.tv_usec=0;

int err;

do{

err=select(0,NULL,NULL,NULL,tv);

}while(err0 errno==EINTR);

}

二、毫秒级别定时器

void milliseconds_sleep(unsigned long mSec){

struct timeval tv;

tv.tv_sec=mSec/1000;

tv.tv_usec=(mSec%1000)*1000;

int err;

do{

err=select(0,NULL,NULL,NULL,tv);

}while(err0 errno==EINTR);

}

三、微妙级别定时器

void microseconds_sleep(unsigned long uSec){

struct timeval tv;

tv.tv_sec=uSec/1000000;

tv.tv_usec=uSec%1000000;

int err;

do{

err=select(0,NULL,NULL,NULL,tv);

}while(err0 errno==EINTR);

}

现在我们来编写几行代码看看定时效果吧。

#include stdio.h

#include sys/time.h

#include errno.h

int main()

{

int i;

for(i=0;i5;++i){

printf("%d\n",i);

//seconds_sleep(1);

//milliseconds_sleep(1500);

microseconds_sleep(1900000);

}

}

注:timeval结构体中虽然指定了一个微妙级别的分辨率,但内核支持的分别率往往没有这么高,很多unix内核将超时值向上舍入成10ms的倍数。此外,加上内核调度延时现象,即定时器时间到后,内核还需要花一定时间调度相应进程的运行。因此,定时器的精度,最终还是由内核支持的分别率决定。

求linux毫秒级定时器的实现

自己用多线程实现呗,如果不要求精确控制的话,只需要让新开的线程循环,每次循环sleep 300毫秒,然后触发主线程的处理

linux下,记录响应时间的脚本,精确到毫秒ms

gettimeofday(取得目前的时间)

相关函数

time,ctime,ftime,settimeofday

表头文件

#include sys/time.h

#include unistd.h

定义函数

int gettimeofday ( struct timeval * tv , struct timezone * tz )

函数说明

gettimeofday()会把目前的时间有tv所指的结构返回,当地时区的信息则放到tz所指的结构中。

timeval结构定义为:

struct timeval{

long tv_sec; /*秒*/

long tv_usec; /*微秒*/

};

timezone 结构定义为:

struct timezone{

int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/

int tz_dsttime; /*日光节约时间的状态*/

};

上述两个结构都定义在/usr/include/sys/time.h。tz_dsttime 所代表的状态如下

DST_NONE /*不使用*/

DST_USA /*美国*/

DST_AUST /*澳洲*/

DST_WET /*西欧*/

DST_MET /*中欧*/

DST_EET /*东欧*/

DST_CAN /*加拿大*/

DST_GB /*大不列颠*/

DST_RUM /*罗马尼亚*/

DST_TUR /*土耳其*/

DST_AUSTALT /*澳洲(1986年以后)*/

返回值

成功则返回0,失败返回-1,错误代码存于errno。附加说明EFAULT指针tv和tz所指的内存空间超出存取权限。

范例

#includesys/time.h

#includeunistd.h

main(){

struct timeval tv;

struct timezone tz;

gettimeofday (tv , tz);

printf(“tv_sec; %d\n”, tv,.tv_sec) ;

printf(“tv_usec; %d\n”,tv.tv_usec);

printf(“tz_minuteswest; %d\n”, tz.tz_minuteswest);

printf(“tz_dsttime, %d\n”,tz.tz_dsttime);

}

执行

tv_sec: 974857339

tv_usec:136996

tz_minuteswest:-540

tz_dsttime:0

如何设置LINUX系统的时间到毫秒级

在任一单元格内输入或复制粘贴下列公式 =TEXT(NOW(),"yyyy-m-d h:mm:ss.000") 或 在A1中输入或复制粘贴下列公式 =NOW() 选择A1 CTRL+1 数字 自定义 类型 输入 yyyy-m-d h:mm:ss.000 确定 每按一下F9键,更新一次数值


当前标题:linux毫秒精度命令,linux 精确延时
本文网址:http://cdkjz.cn/article/hdchsi.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220