A. linux怎么用c获取当前时间
Linux C编程获取当前时间用time这个函数,time函数会返回一个time_t类型的时间回戳(这个time_t类型实际上是一个长整型,定义答在time.h头文件中)。time函数的函数原型是这样的:
time_t time(time_t *tloc);
使用time函数需要包含time.h头文件:
#include <time.h>
调用time函数的代码是这样的:
time_t t;
t=time((time_t *) 0);
因为time函数参数的作用和返回值一样,只是用于接收时间戳,所以这里调用time函数可以传入一个空指针,表示只用它的返回值,不用指针参数来接收时间戳。
因为time函数只是返回一个时间戳,如果想打印直观的时间信息,可以把刚才的time_t作为参数调用ctime函数,ctime函数会返回一个字符串,ctime函数的调用是这样的:
printf("The time and date is: %s", ctime(&t));
t就是刚才调用time函数返回的time_t类型变量。
B. linux下c++的clock统计时间怎么不准
linux下c++的clock统计时间怎么不准
计时,也就是获取当前的时间,使用 gettimeofday(),精度 1 毫秒。x86_64 ...
C语言中如何计算时间差 : C语言中如何计算时间差 如何将两个包含“年月...2)关于sleep中的数,在Windows和Li...
linux下如何查卡cpu的频率 : clock -w 将时间修改保存到 BIOS 关机(系统的...chattr +c file1 允许...
请问C语言中clock()函数该怎么用? : 这表示硬件滴答1000下是1秒,因此要计算一个进程的时间,用clock()除以1000...之类的是...
LINUX下C语言编程怎么打印日志 : LINUX下C语言编程怎么打印日志 linux编程C语言 ...time_t clock ; ap...
Linux 怎么修改系统和文件的创建时间和最后修改时间 : date-s05/06/2016修改年月日为2016年5月6日,date-s09:30:00设置系统...
for语句延时时间计算方法 : clock如果不够精确,linux下可以用gettimeofday,windows下用GetSysT...
linux 如何获取ntp服务器时间 : “Synchronize system clock before startingservice”,...
linux c clock函数持续时间一直为0; : clock_t clock (void) 解释为This function returns the ...
C. Linux下C语言获得系统时间的方法
没有完整程序, 不过能提供一点资料
int gettimeofday(struct timeval * tv,struct timezone *tz);
这个函数可以获取当前时间, 貌似只要第一个结构体就行了
struct timeval
{
time_t tv_sec; //秒 [long int]
suseconds_t tv_usec; //微秒 [long int], (10E-6 second)
};
struct timeval
{
long tv_sec;
long tv_usec;
};
然后取微秒的前三位就是小数了, 之后把秒 tv_sec 转化为 tm 格式, 参数用秒的指针就行
struct tm * gmtime(const time_t * t);
//转换成格林威治时间。有时称为GMT或UTC。
struct tm * localtime(const time_t *t);
//转换成本地时间。它可以透过修改TZ环境变数来在一台机器中,不同使用者表示不同时间.
下面是tm的部分参数
int tm_sec; //tm_sec表「秒」数,在[0,61]之间,多出来的两秒是用来处理跳秒问题用的。/* Seconds: 0-59 (K&R says 0-61?) */
int tm_min; //tm_min表「分」数,在[0,59]之间。
int tm_hour; //tm_hour表「时」数,在[0,23]之间。
int tm_mday; //tm_mday表「本月第几日」,在[1,31]之间。
int tm_mon; //tm_mon表「本年第几月」,在[0,11]之间。
int tm_year; //tm_year要加1900表示那一年。 /* /* 年份,其值从1900开始 */*/
int tm_wday; //tm_wday表「本周第几日」,在[0,6]之间。 /* Days since Sunday (0-6) */ /*其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; //tm_yday表「本年第几日」,在[0,365]之间,闰年有366日。 /*其中0代表1月1日,1代表1月2日,以此类推 */*/
int tm_isdst; //tm_isdst表是否为「日光节约时间」
------------------------------华丽丽的分割线--------------------------------------------------
由于很长时间没编程了, 也没有Linux环境, 我就简单写几行代码, 仅作参考
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include<unistd.h>
//这四个不一定够用了
struct timeval tv;
struct timezone tz;
struct tm * p_tm;
//变量没有初始化习惯不好,不要学
gettimeofday(&tv, &tz);
p_tm = gmtime( (const time_t *)&tv.tv_sec );
字符串的组装尤其格式问题自己解决吧
年 p_tm->tm_year+ 1900
月 p_tm->tm_mon+ 1
日 p_tm->tm_mday
时 p_tm->tm_hour+ 1
分 p_tm->tm_min+ 1
秒 p_tm->tm_sec+ 1
小数点后面的部分,注意不够三位还是前面填充0 tv.tv_sec/1000
D. 如何在c语言程序中插入一个倒计时命令
C语言中提供了许多库函数来实现计时功能,下面是一些常用的计时函数:
1、 time()
头文件:time.h
函数原型:time_t time(time_t * timer)
功能:返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的时此刻所经过的秒数
用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。
用difftime函数可以计算两个time_t类型的时间的差值,可以用于计时。用difftime(t2,t1)要比t2-t1更准确,因为C标准中并没有规定time_t的单位一定是秒,而difftime会根据机器进行转换,更可靠。
说明:C标准库中的函数,可移植性最好,性能也很稳定,但精度太低,只能精确到秒,对于一般的事件计时还算够用,而对运算时间的计时就明显不够用了。
2、clock()
头文件:time.h
函数原型:clock_t clock(void);
功能:该函数返回值是硬件滴答数,要换算成秒,需要除以CLK_TCK或者 CLK_TCKCLOCKS_PER_SEC。比如,在VC++6.0下,这两个量的值都是1000。
说明:可以精确到毫秒,适合一般场合的使用。
3.、timeGetTime()
头文件:Mmsystem.h 引用库: Winmm.lib
函数原型:DWORD timeGetTime(VOID);
功能:返回系统时间,以毫秒为单位。系统时间是从系统启动到调用函数时所经过的毫秒数。注意,这个值是32位的,会在0到2^32之间循环,约49.71天。
说明:该函数的时间精度是五毫秒或更大一些,这取决于机器的性能。可用timeBeginPeriod和timeEndPeriod函数提高timeGetTime函数的精度。如果使用了,连续调用timeGetTime函数,一系列返回值的差异由timeBeginPeriod和timeEndPeriod决定。
4、GetTickCount()
头文件:windows.h
函数原型:DWORD WINAPI GetTickCount(void);
功能:返回自设备启动后的毫秒数(不含系统暂停时间)。
说明:精确到毫秒。对于一般的实时控制,使用GetTickCount()函数就可以满足精度要求。
5、QueryPerformanceCounter()、QueryPerformanceFrequency()
头文件:windows.h
函数原型:BOOLQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
功能:前者获得的是CPU从开机以来执行的时钟周期数。后者用于获得你的机器一秒钟执行多少次,就是你的时钟周期。
补充:LARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构, 其具体用法根据编译器是否支持64位而定:
在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。
说明:这种方法的定时误差不超过1微秒,精度与CPU等机器配置有关,一般认为精度为透微秒级。在Windows平台下进行高精度计时的时候可以考虑这种方法。
6、gettimeofday()
Linux C函数。
头文件:sys/time.h
函数原型:int gettimeofday(struct timeval *tv,struct timezone *tz);
说明:其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果(若不使用则传入NULL即可)。
timeval的定义为:
struct timeval {
long tv_sec; // 秒数
long tv_usec; //微秒数
}
E. 在linux环境下c语言中如何让while循环执行固定的时间如200毫秒
...
楼上的想让你的程序变成悲剧...linux下sleep函数的参数是秒为单位的...休眠200秒...
睡眠小于1秒用usleep,单位是毫秒...
所以,楼上的程序把sleep改成usleep就可以 了...
while(1)
{
/* any thing you want to do*/
usleep(200);
}
另外我觉得你要说的好像是:希望while循环执行某些操作,执行时间到200毫秒之后退出while循环?
最简单是用间隔定时器...
你查下这几个函数:timer_create,timer_settime等。
时间设置比较精确,可以设置一段时间间隔,过了指定的时间之后,会给当前进程发送一个SIGALRM信号,你while循环的条件,可以在SIGALRM的信号处理函数里面修改,这样,到时间之后while就可以退出了....
这样写:
//...
...
...
static char flag=1
...
int main(void)
{
signal(SIGALRM, timer_handler);
/*
申请并且设置间隔定时器的间隔
*/
while(flag)
{
/*循环内的操作*/
}
...
return 0;
}
void timer_handler(unsigned int signal)
{
flag=0;
}
F. Linux编程itimerval计时器结构体问题
楼主的程序没有用 signal 注册 SIGPROC 对应函数,在 for 循环的时候可能已经发生了多次中断和重置计时器。至于比1秒大,手册中有解释 Timers will never expire before the requested time, but may expire some (short) time afterward, which depends on the system timer resolution and on the system load; see time(7).
要在1秒间隔调用一个函数,需要加上 signal,比如
#include<signal.h>
#include<sys/time.h>
#include<stdio.h>
#include<time.h>
staticstructitimervala;
voidtimeover(intevent)
{
structitimervalb;
printf("timeoverat%ld ",time(NULL));
getitimer(ITIMER_PROF,&b);
printf("sec=%ld,usec=%ld ",b.it_value.tv_sec,b.it_value.tv_usec);
}
intmain()
{
signal(SIGPROF,timeover);
printf("beginat%ld ",time(NULL));
a.it_interval.tv_sec=1;
a.it_interval.tv_usec=0;
a.it_value.tv_sec=1;
a.it_value.tv_usec=0;
setitimer(ITIMER_PROF,&a,NULL);
while(1);
return0;
}
G. linux下c++的clock统计时间怎么不准
1) 计时,也就是获取当前的时间,使用 gettimeofday(),精度 1 毫秒。x86_64 下是用户态实现,无上下文切换且不陷入内核,效率非常高。
clock_gettime() 精度可到纳秒,但需要陷入内核,效率较低。
2) 定时,使用 timerfd_create() / timerfd_gettime() / timerfd_settime()。实现确保不使用 SIGALRM 信号,避免冲突和多线程问题。精度可到纳秒。
具体设置方法可以看linuxprobe. c o m 希望对你有帮助
H. C语言的clock()测出来的是什么时间
clock函数返回的是cpu时间,并不是秒数,真正的一秒钟可能包含若干个CPU时间,这个值通常是由宏CLOCKS_PER_SEC来定义,表示一秒中有CLOCKS_PER_SEC这么多个cpu时间,不同的编译器可能不同,比如,linux C中,它是1000000,在VC6中,它是1000,你用cost除以CLOCKS_PER_SEC即可得到实际的秒数。
附linux下clock函数说明:
在单独的窗口中打开图片可以看得更清楚一些,注意红线部分说明:要计算秒数,除以CLOCKS_PER_SEC