-
2018-08-18 20:21:48
包含系统头文件:#include <sys/time.h>
用到的接口:
int gettimeofday(struct timeval *tv, struct timezone *tz);
计算时间间隔,精确到微秒:
1.首先获取任务起始时间值,使用上述接口,也可以封装,并记录到微秒
2.中途执行其他任务
3.再次获取任务结束时间值,使用上述接口,也可以简单封装
4.计算两次时间间隔,微秒转换为秒,单位为S,保留小数位数。
long long GetCurrentTime() { struct timeval time; gettimeofday(&time,NULL); return (time.tv_sec * 1000000 + time.tv_usec); } double CalcTime_inusec(long long startusec, long long endusec) { return (double)(endusec - startusec)/1000000.0; }
举例:
int main () { long long startusec, endusec; double elaps; startusec = GetCurrentTime(); /* do sth */ endusec = GetCurrentTime(); elaps = CalcTime_inusec(startusec, endusec); printf("do sth took %.4f seconds\n", elaps);/* 精确到小数点后四位输出值,单位为S */ }
更多相关内容 -
“32bit 机器上gettimeofday() 返回值的tv_sec 要先强制转成long long类型”的问题
2013-11-18 17:05:44tm.tv_sec 和 tm.tv_usec的值都是正确的,但timestamp值异常,应该是1384764898000,结果像是被截断了,成了1785428688。 修改第13行代码如下。即,先将tm.tv_sec强制类型转换成long long 类型,然后再做...今天遇到一个和gettimeofday()相关奇怪的问题,问题描述如下。
有如下代码,在32bit CentOS 6.3平台上编译后运行
运行结果如下。#include <iostream> #include <sys/time.h> using namespace std; int main(void) { std::cout << __WORDSIZE << std::endl; struct timeval tm; gettimeofday(&tm, NULL); cout << "tm.tv_sec: " << tm.tv_sec << endl; cout << "tm.tv_usec: " << tm.tv_usec << endl; long long timestamp = tm.tv_sec * 1000; cout << "timestamp: " << timestamp << endl; return 0; }
这里的32表明是32bit机器。tm.tv_sec 和 tm.tv_usec的值都是正确的,但timestamp值异常,应该是1384764898000,结果像是被截断了,成了1785428688。32 tm.tv_sec: 1384764898 tm.tv_usec: 303888 timestamp: 1785428688
修改第13行代码如下。即,先将tm.tv_sec强制类型转换成long long 类型,然后再做计算。
这样改过后,结果正确。#include <iostream> #include <sys/time.h> using namespace std; int main(void) { std::cout << __WORDSIZE << std::endl; struct timeval tm; gettimeofday(&tm, NULL); cout << "tm.tv_sec: " << tm.tv_sec << endl; cout << "tm.tv_usec: " << tm.tv_usec << endl; long long timestamp = (long long)tm.tv_sec * 1000; cout << "timestamp: " << timestamp << endl; return 0; }
32 tm.tv_sec: 1384764980 tm.tv_usec: 331110 timestamp: 1384764980000
但是为什么会这样?timestamp是long long类型的,8字节,足够承载最终计算出来的值,所以像是问题出在tm.tv_sec上,但是tm.tv_sec本身输出的值也是正确的~~~
我猜原因大概是这样的:
1384764980 * 1000的值已经超出32位有符号int所能表示的最大上限(2 ^ 31 - 1 = 2147483647)了。
同时,long long timestamp = tm.tv_sec * 1000很可能被编译器先转成了下面的样子(32位系统下,tm.tv_sec的数据类型 time_t 是4字节int)
int tmp = tm.tv_sec * 1000;
long long timestamp = tmp;
在第一步就已经发生溢出了,第二步赋值给long long型变量还是溢出的值!
下面用一个小例子 t.cpp 来验证上面的猜测。
int main(void) { int intValue = 2100000000; long long llValue = intValue * 10; return 0; }
通过 g++ -save-temps -S t.cpp 命令得到g++编译 t.cpp 过程中产生的汇编文件 t.s
基本上就是,用32位的寄存器做乘10的运算,结果也存在32位eax寄存器中(16-21行,这时已经溢出了),然后在赋值给llValue(22-25行)的时候,扩展成64位寄存器(edx, eax)表示。
=======================================
对 t.cpp 稍作修改如下,即在 intValue 做乘10操作前,强制类型转换成 long long 类型
int main(void) { int intValue = 2100000000; long long llValue = (long long)intValue * 10; return 0; }
然后,得到新的汇编代码如下.file "x.cpp" .text .globl main .type main, @function main: .LFB0: .cfi_startproc .cfi_personality 0x0,__gxx_personality_v0 pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 andl $-8, %esp pushl %ebx subl $20, %esp movl $2100000000, 4(%esp) movl 4(%esp), %eax movl %eax, %edx sarl $31, %edx imull $10, %edx, %ecx imull $0, %eax, %ebx .cfi_escape 0x10,0x3,0x7,0x75,0x0,0x9,0xf8,0x1a,0x34,0x1c addl %ebx, %ecx movl $10, %ebx mull %ebx addl %edx, %ecx movl %ecx, %edx movl %eax, 8(%esp) movl %edx, 12(%esp) movl %eax, 8(%esp) movl %edx, 12(%esp) movl $0, %eax addl $20, %esp popl %ebx .cfi_restore 3 movl %ebp, %esp .cfi_def_cfa_register 4 popl %ebp .cfi_restore 5 .cfi_def_cfa_offset 4 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-3)" .section .note.GNU-stack,"",@progbits
大致的意思就是,通过下面两条指令将数字2100000000保存在eax寄存器中:
movl $2100000000, 4(%esp)
movl 4(%esp), %eax
然后通过无符号乘法运算mull对eax做乘10操作,结果的高32位保存在edx中,低32位保存在eax中。
movl $10, %ebx
mull %ebx ;eax * ebx = edx,eax
2100000000的符号位通过算术右移31位获取到,然后也乘10,再加到结果的高32位edx寄存器中。
即,用两个32位寄存器来表示最终的计算结果,于是没有发生溢出!
前面的猜测基本正确~~~
-
linux 时间与文件实验
2013-05-10 12:21:13tick.it_value.tv_usec = 0; tick.it_i nt erval.tv_sec =1; //定时器启动后,每隔 1 秒将执行相应的函数 tick.it_i nt erval.tv_usec = 0; //setitimer 将触发 SIGALRM 信号 int ret = setiti mer(ITIMER_REAL, &... -
Linux 下c获取当前时间(精确到秒和毫秒或者微秒)
2019-10-22 13:43:09获取当前的时间的秒数和微秒数本方法需要用到gettimeofday()函数,该函数需要引入的头文件是 sys/time.h 。...函数说明int gettimeofday (struct timeval * tv, struct timezone * tz) 1、返回值:该函数成功时返...转载:https://blog.csdn.net/deyuzhi/article/details/51814934
获取当前的时间的秒数和微秒数本方法需要用到gettimeofday()函数,该函数需要引入的头文件是 sys/time.h 。函数说明int gettimeofday (struct timeval * tv, struct timezone * tz)
1、返回值:该函数成功时返回0,失败时返回-1
2、参数
struct timeval{
long tv_sec; //秒
long tv_usec; //微秒
};
struct timezone
{
int tz_minuteswest; //和Greenwich 时间差了多少分钟
int tz_dsttime; //日光节约时间的状态
};
3、示例#include
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>int main(){
struct timeval tv;
gettimeofday(&tv,NULL);
printf(“second:%ld\n”,tv.tv_sec); //秒
printf(“millisecond:%ld\n”,tv.tv_sec1000 + tv.tv_usec/1000); //毫秒
printf(“microsecond:%ld\n”,tv.tv_sec1000000 + tv.tv_usec); //微秒sleep(3); // 为方便观看,让程序睡三秒后对比 std::cout << "3s later:" << std::endl; gettimeofday(&tv,NULL); printf("second:%ld\n",tv.tv_sec); //秒 printf("millisecond:%ld\n",tv.tv_sec*1000 + tv.tv_usec/1000); //毫秒 printf("microsecond:%ld\n",tv.tv_sec*1000000 + tv.tv_usec); //微秒 return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
运行结果:
second:1467523986
millisecond:1467523986800
microsecond:1467523986800434
3s later:
second:1467523989
millisecond:1467523989800
microsecond:14675239898006974、附
一秒等于1000毫秒
一秒等于1000000微秒
一秒等于1000000000纳秒
————————————————
版权声明:本文为CSDN博主「is_thinking」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/deyuzhi/article/details/51814934 -
Linux内核实验(三):内核定时机制实验
2018-07-25 13:49:01printf("%02d:%02d:%02d:%ld\r",today/3600+8,(today%3600)/60,(today%3600)%60,now.tv_usec); fflush(stdout); } /***************************************** * * 内核的定时机制 * * Copyright: (C) 2018...一、引言
练习编写调用内核的时间测量功能为应用程序测量和精确定时。
通过这个实验进一步了解Linux内核的定时机制及其数据结构以及怎样从用户空间去访问内核空间的时间数据。
二、实验内容
问题A:使用ITIMER_REAL型定时器实现一个gettimeofday(),将它设置为每秒产生一个信号,并计算已经经过的秒数。
问题B:使用以上实现的gettimeofday()实现一个精确到微秒级的“壁钟”。
三、实验代码
/***************************************** * * 内核的定时机制 * * Copyright: (C) 2018.4.24 by shaomingshan * * Compile: gcc -g -o main_a main_a.c * * Execute: ./main_a * *****************************************/ #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/time.h> #include <signal.h> static void sig_real(int); static long real_secs = 0; static struct itimerval realt; int main(int argc, char *argv[]) { signal(SIGALRM, sig_real); realt.it_interval.tv_sec = 0; realt.it_value.tv_sec = 0; realt.it_interval.tv_usec = 999999; realt.it_value.tv_usec = 999999; setitimer(ITIMER_REAL, &realt, NULL); for(;;); return 0; } static void sig_real(int non) { real_secs += 1; printf("%ld\r", real_secs); fflush(stdout); }
/***************************************** * * 内核的定时机制 * * Copyright: (C) 2018.4.24 by shaomingshan * * Compile: gcc -g -o main_b main_b.c * * Execute: ./main_b * *****************************************/ #include <sys/time.h> #include <stdio.h> #include <signal.h> static void sighandle(int); struct timeval now; int today; int main(){ struct itimerval v; signal(SIGALRM,sighandle); v.it_interval.tv_sec = 0; v.it_interval.tv_usec = 1; v.it_value.tv_sec = 0; v.it_value.tv_usec = 1; setitimer(ITIMER_REAL, &v, NULL); for(;;); } static void sighandle(int s){ gettimeofday(&now, NULL); today = now.tv_sec%(3600*24); printf("%02d:%02d:%02d:%ld\r",today/3600+8,(today%3600)/60,(today%3600)%60,now.tv_usec); fflush(stdout); }
/***************************************** * * 内核的定时机制 * * Copyright: (C) 2018.4.24 by shaomingshan * * Compile: gcc -g -o main_c main_c.c * * Execute: ./main_c * *****************************************/ #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> #include <sys/time.h> #include <wait.h> // 父进程定时中断处理 static void psig_real(int); static void psig_virtual(int); static void psig_prof(int); // 子进程1定时中断处理 static void c1sig_real(int); static void c1sig_virtual(int); static void c1sig_prof(int); // 子进程2定时中断处理 static void c2sig_real(int); static void c2sig_virtual(int); static void c2sig_prof(int); long unsigned int fibonnacci(unsigned int n); static long p_real_secs = 0, c1_real_secs = 0, c2_real_secs = 0, p_virtual_secs = 0, c1_virtual_secs = 0, c2_virtual_secs = 0, p_prof_secs = 0, c1_prof_secs = 0, c2_prof_secs = 0; static struct itimerval p_realt, c1_realt, c2_realt; static struct itimerval p_virtt, c1_virtt, c2_virtt; static struct itimerval p_proft, c1_proft, c2_proft; int main(int argc, char *argv[]) { long unsigned fib = 0; int pid1, pid2; unsigned int fibarg; int status; int i; if (argc < 3) { printf("Usage: testsig arg1 arg2 arg3\n"); return 1; } pid1 = fork(); if (pid1==0) { signal(SIGALRM, c1sig_real); signal(SIGVTALRM, c1sig_virtual); signal(SIGPROF, c1sig_prof); c1_realt.it_interval.tv_sec = 9; c1_realt.it_interval.tv_usec = 999999; c1_realt.it_value.tv_sec = 9; c1_realt.it_value.tv_usec = 999999; setitimer(ITIMER_REAL, &c1_realt, NULL); c1_virtt.it_interval.tv_sec = 9; c1_virtt.it_interval.tv_usec = 999999; c1_virtt.it_value.tv_sec = 9; c1_virtt.it_value.tv_usec = 999999; setitimer(ITIMER_VIRTUAL, &c1_virtt, NULL); c1_proft.it_interval.tv_sec = 9; c1_proft.it_interval.tv_usec = 999999; c1_proft.it_value.tv_sec = 9; c1_proft.it_value.tv_usec = 999999; setitimer(ITIMER_PROF, &c1_proft, NULL); fib = fibonnacci(atoi(argv[1])); getitimer(ITIMER_REAL, &c1_realt); printf("Child1 fib = %ld\nChild1 Real Time = %2ldSec: %03ldMsec\n", fib, c1_real_secs+9-c1_realt.it_value.tv_sec, (999999-c1_realt.it_value.tv_usec)/1000); getitimer(ITIMER_VIRTUAL, &c1_virtt); printf("Child1 Virtual Time = %2ldSec: %03ldMsec\n", c1_virtual_secs+9-c1_virtt.it_value.tv_sec, (999999-c1_virtt.it_value.tv_usec)/1000); getitimer(ITIMER_PROF, &c1_proft); printf("Child1 Prof Time = %2ldSec: %03ldMsec\n\n", c1_prof_secs+9-c1_proft.it_value.tv_sec, (999999-c1_proft.it_value.tv_usec)/1000); } else if ((pid2=fork())==0) { signal(SIGALRM, c2sig_real); signal(SIGVTALRM, c2sig_virtual); signal(SIGPROF, c2sig_prof); c2_realt.it_interval.tv_sec = 9; c2_realt.it_interval.tv_usec = 999999; c2_realt.it_value.tv_sec = 9; c2_realt.it_value.tv_usec = 999999; setitimer(ITIMER_REAL, &c2_realt, NULL); c2_virtt.it_interval.tv_sec = 9; c2_virtt.it_interval.tv_usec = 999999; c2_virtt.it_value.tv_sec = 9; c2_virtt.it_value.tv_usec = 999999; setitimer(ITIMER_VIRTUAL, &c2_virtt, NULL); c2_proft.it_interval.tv_sec = 9; c2_proft.it_interval.tv_usec = 999999; c2_proft.it_value.tv_sec = 9; c2_proft.it_value.tv_usec = 999999; setitimer(ITIMER_PROF, &c2_proft, NULL); fib = fibonnacci(atoi(argv[2])); getitimer(ITIMER_REAL, &c2_realt); printf("Child2 fib = %ld\nChild2 Real Time = %2ldSec: %03ldMsec\n", fib, c2_real_secs+9-c2_realt.it_value.tv_sec, (999999-c2_realt.it_value.tv_usec)/1000); getitimer(ITIMER_VIRTUAL, &c2_virtt); printf("Child2 Virtual Time = %2ldSec: %03ldMsec\n", c2_virtual_secs+9-c2_virtt.it_value.tv_sec, (999999-c2_virtt.it_value.tv_usec)/1000); getitimer(ITIMER_PROF, &c2_proft); printf("Child2 Prof Time = %2ldSec: %03ldMsec\n\n", c2_prof_secs+9-c2_proft.it_value.tv_sec, (999999-c2_proft.it_value.tv_usec)/1000); } else { // 父进程设置3种定时处理入口 signal(SIGALRM, psig_real); signal(SIGVTALRM, psig_virtual); signal(SIGPROF, psig_prof); // 初始化父进程3种时间定时器 p_realt.it_interval.tv_sec = 9; p_realt.it_interval.tv_usec = 999999; p_realt.it_value.tv_sec = 9; p_realt.it_value.tv_usec = 999999; setitimer(ITIMER_REAL, &p_realt, NULL); p_virtt.it_interval.tv_sec = 9; p_virtt.it_interval.tv_usec = 999999; p_virtt.it_value.tv_sec = 9; p_virtt.it_value.tv_usec = 999999; setitimer(ITIMER_VIRTUAL, &p_virtt, NULL); p_proft.it_interval.tv_sec = 9; p_proft.it_interval.tv_usec = 999999; p_proft.it_value.tv_sec = 9; p_proft.it_value.tv_usec = 999999; setitimer(ITIMER_PROF, &p_proft, NULL); fib = fibonnacci(atoi(argv[3])); getitimer(ITIMER_REAL, &p_realt); printf("Parent fib = %ld\nParent Real Time = %2ldSec: %03ldMsec\n", fib, p_real_secs+9-p_realt.it_value.tv_sec, (999999-p_realt.it_value.tv_usec)/1000); getitimer(ITIMER_VIRTUAL, &p_virtt); printf("Parent Virtual Time = %2ldSec: %03ldMsec\n", p_virtual_secs+9-p_virtt.it_value.tv_sec, (999999-p_virtt.it_value.tv_usec)/1000); getitimer(ITIMER_PROF, &p_proft); printf("Parent Prof Time = %2ldSec: %03ldMsec\n\n", p_prof_secs+9-p_proft.it_value.tv_sec, (999999-p_proft.it_value.tv_usec)/1000); waitpid(0, &status, 0); waitpid(0, &status, 0); } return 0; } static void psig_real(int non) { p_real_secs += 10; } static void psig_virtual(int non) { p_virtual_secs += 10; } static void psig_prof(int non) { p_prof_secs += 10; } static void c1sig_real(int non) { c1_real_secs += 10; } static void c1sig_virtual(int non) { c1_virtual_secs += 10; } static void c1sig_prof(int non) { c1_prof_secs += 10; } static void c2sig_real(int non) { c2_real_secs += 10; } static void c2sig_virtual(int non) { c2_virtual_secs += 10; } static void c2sig_prof(int non) { c2_prof_secs += 10; } long unsigned int fibonnacci(unsigned int n) { if (n < 3) return 1; return fibonnacci(n-1)+fibonnacci(n-2); }
四、运行结果
如有错误请指正
-
do_gettimeofday使用方法
2021-03-14 22:16:00它的精度可以达到微妙,是与C标准库中gettimeofday()用发相同的函数。在Linux内核中获得时间的函数。 2.函数原型: #include <linux/time.h> void do_gettimeofday(struct timeval *tv); 3.说明: do_... -
timeval时间溢出问题
2018-12-24 19:24:57该结构体是Linux系统中定义,struct timeval结构体在time.h中的定义为: struct timeval { __time_t tv_sec;...在ndk中使用tv_sec或者tv_usec时,需先强制类型转换,否则直接用于计算或者显示会有... -
Linux时钟精度:毫秒?微妙?纳秒?
2016-09-05 12:44:03解释同上,tv_sec代表墙上时间的秒,tv_usec表示从上一秒到现在经过的微秒数。就是说,它的精度是 微妙 。 struct timeval{ long tv_sec; //秒 long tv_usec; //微妙 }; 精彩的... -
Linux精确计时,及常用C时间函数(转)
2015-05-12 23:50:33以微秒为单位的精确计时 long long L1,L2,L3; timeval tv1;...L1 = tv.tv_sec*1000*1000 + tv.tv_usec; //执行一些代码,如算法1... //第二次取时间 gettimeofday(&tv,NU -
struct timeval结构体
2019-11-29 16:54:08一、struct timeval结构体 struct timeval结构体在time.h中的定义为: struct timeval ...__suseconds_t tv_usec; /* Microseconds. */ }; 其中,tv_sec为Epoch到创建struct timeval时的秒数,tv_use... -
C语言:获取程序运行消耗的时间——gettimeofday
2017-02-27 16:01:15在测试程序时,往往需要了解程序执行所需的时间...对于普通的C程序:使用 gettimeofday() 函数#include #include<sys/time.h> //注意引用这个头文件 #include<unistd.h>int delay(int time) { //这里用来表示你自己要运 -
Linux下多线程模拟生产者/消费者问题
2015-11-07 20:46:11timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec; printf("time:%ldus product_%d in %d. buffer: ", timer,id, in+1); //printf("timer = %ld us\n",timer); buff[in] = 1; ... -
localtime、localtime_s、localtime_r的使用
2018-12-20 16:29:51ptm.tm_mday, ptm.tm_hour, ptm.tm_min, ptm.tm_sec,tv.tv_usec);//取微妙级别的 } c.localtime_s也是用来获取系统时间,运行于windows平台下,与localtime_r只有参数顺序不一样 #include #include int... -
C/C++开发中遇到的时间Time计算
2014-07-10 14:49:06return tv.tv_sec * 1000 + tv.tv_usec / 1000; } int main() { printf("TK------>>>>>>sizeof(long) is %d\n",sizeof(long)); printf("c/c++ program:%llu\n",getCurrentTime()); return 0; } */ ... -
linux时间方面的设置
2014-07-09 14:45:38如下一段代码可以借鉴:static void _sleep_response_timeout(modbus_t *ctx) { #ifdef _WIN32 /* usleep doesn't exist on Windows */ Sleep((ctx->response_timeout.tv_sec * 1000) + (ctx->response_timeo -
Linux下socket发送接收超时值的获取与设置
2018-09-18 15:23:05一、 SO_RCVTIMEO和SO_SNDTIMEO套接口选项说明 ...一个新创建的socket默认是阻塞的,就可以通过设置超时来获得返回,因为默认的socket发送和接收的超时timeval的两个成员tv_sec和tv_usec都是0,表明永不超时。 -
C++中的计时器
2021-07-03 14:38:22timeuse = t2.tv_sec - t1.tv_sec + (t2.tv_usec - t1.tv_usec)/1000000.0; printf("Use Time:%f\n",timeuse); } 8.RDTSC指令计时(Linux) 该时间精度同windows的可以达到纳秒级精度。 #if defined (__i386__) ... -
Unix/Linux系统下获得时间戳函数
2021-05-11 15:21:07long deltaTime = 1000000L * (tEnd.tv_sec - tBegin.tv_sec ) + (tEnd.tv_usec - tBegin.tv_usec); printf("Time spent: %ldus\n", deltaTime); } 上述代码中,gettimeofday(&tBegin, NULL)用于获得计算之前的... -
gettimeofday 取毫秒的溢出 获得负数处理
2019-05-17 13:55:08Android NDK 开发在测试接口性能 使用gettimeofday,发现获取系统时间的函数输出的是一个负数。 long getCurrentMillisecondCount() { struct timeval tv;... return tv.tv_sec * 1000 + tv.tv_usec /... -
struct timeval结构体 以及 gettimeofday()函数
2017-07-01 20:28:10关于 struct timeval struct timeval { __time_t tv_sec;/*Seconds.*/ ...其中tv_sec是Epoch到创建结构体timeval的秒数,tv_usec为微秒数,也就是秒数后面的零头, 下面做一个实验 #include #inclu -
linux 延时及时间函数总结
2016-10-18 16:22:09一、 基础知识 1、时间类型。Linux下常用的时间类型有4个:time_t,struct timeval,struct timespec,struct tm。 (1)time_t是一个长整型,一般用来表示用1970年以来的秒数。... long tv_ -
[笔记]linux C/C++ 获取精确时间方法
2019-11-29 17:11:03获取带毫秒的时间 #include <time.h> #include <sys/time.h> //调用函数时候可以传入字符串进行区别和标记 ... struct timeval tv; struct timezone tz; struct tm *p; gettimeofda... -
struct timeval
2017-05-18 10:56:40 struct timeval{ ...其中,tv_sec为Epoch到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。 Epoch指的是一个特定的时间:1970-01-01 00:00:00 UTC。 示例: struct timeval t -
Linux精确计时,及常用C时间函数
2010-07-16 11:44:00L1 = tv.tv_sec*1000*1000 + tv.tv_usec;//执行一些代码,如算法1...//第二次取时间gettimeofday(&tv,NULL);L2 = tv.tv_sec*1000*1000+tv.tv_usec;//执行一些代码,如算法2...gettimeofday(&tv,NULL);L3 = tv.tv_sec*... -
libevent的锁机制之evthread_use_pthreads()介绍
2020-04-21 19:18:58对于linux libevent已经提供了一套锁机制,我们就不用...我们在linux上使用锁机制的时候只要使用int evthread_use_pthreads(void) 开启使用多线程机制,那么锁的机制也会自动加入进来 int evthread_use_pthreads(void... -
获取程序运行时间
2013-04-21 21:31:00#include #include #include void play() { int i; for(i=0;i } int main() { int diff; struct timeval start,end; gettimeofday(&start,0); play(); gettimeofday(&end,0);...n=1000000 * (end.tv_s -
C++获取当前时间
2018-07-04 11:41:331.微秒级 (unix):timeval结构体timeval结构体定义在time.h中:struct timeval{ __time_t tv_sec;... */ __suseconds_t tv_usec; /* Microseconds. */};注: (1)tv_sec为从1970-1-1零点零分到创... -
Linux 系统设置时间和获取时间
2018-06-10 16:42:00tv.tv_usec = 0; 1.4 调用系统函数settimeofday(&tv, NULL),设置就OK了 , settimeofday函数的原型是 int settimeofday(const struct timeval *tv, struct timezone *tz); 参数tv表示时间的结构体,参数tz表示当地... -
CSAPP第五次实验(cahce) 局部性对矩阵乘法的影响
2016-06-09 15:44:20printf("Executiontime = %ld.%6ld seconds\n",time2.tv_sec,time2.tv_usec); return(0); };"> B程序: #include #include #include #include int main(int argc,char *argv[]) { float *a,*b,...