三相交流电血压峰值时间间差是多少毫秒

百度题库旨在为考生提供高效的智能备考服务,全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效服务,助您不断前行!
京ICP证号&&
京网文[3号&&
Copyright (C) 2017 Baidu最近在跑一些程序,需要计算程序运行的时间,然后搜索了一下相关的材料,发现下面的一个比较好的方法,可以实现毫秒级的计时: #include&&sys/timeb.h&#if&defined(WIN32)#&define&&TIMEB&&&&_timeb#&define&&ftime&&&&_ftime#else#define&TIMEB&timeb#endiftime_t&ltime1,&ltime2,&tmp_&&struct&TIMEB&tstruct1,&tstruct2;&&&&ftime&(&tstruct1);&&&&&&&&&&&&//&start&time&ms&&time&(&ltime1);&&&&&&&&&&&&&&&//&start&time&s&&//work&&time&(&ltime2);&&&&&&&&&&&&&&&//&end&time&sec&&ftime&(&tstruct2);&&&&&&&&&&&&//&end&time&ms&&tmp_time&=&(ltime2&*&1000&+&tstruct2.millitm)&-&(ltime1&*&1000&+&tstruct1.millitm);&更新:日 12时34分28秒下面的代码是一个可以在windows和linux平台下进行毫秒级计时的程序。程序中是进行上万次的内存分配来耗时,演示计时的方法的。毫秒级的计时的主要使用的函数ftime,使用ftime可以得到当前时间的毫秒和秒,从而我们可以得到毫秒级的计时。但是如果要以毫秒为单位输出时间的话,必须使用64位的数据类型来表示。在linux上是long long,而windows下是使用__int64.并且如果使用printf的话,需要使用64位情况下对应的输出方式。不然会输出负数,这时就是溢出了。linux下是:printf("%lld",n)windows下是:printf(“%I64d",n) #include&&stdio.h&#include&&sys/timeb.h&#include&&stdlib.h&#if&defined(WIN32)#&define&&TIMEB&&&&_timeb#&define&&ftime&&&&_ftimetypedef&__int64&TIME_T;#else#define&TIMEB&timebtypedef&long&long&TIME_T;#endifint&time_interval(){&&&&struct&TIMEB&ts1,ts2;&&&&TIME_T&t1,t2;&&&&int&&&&&ftime(&ts1);//开始计时&&&&//do&some&work&&&&{&&&&&&&&int&i;&&&&&&&&for(i=0;i&100000;i++)&&&&&&&&{&&&&&&&&&&&&int&*p=malloc(10000);&&&&&&&&&&&&int&*q=malloc(10000);&&&&&&&&&&&&int&*s=malloc(10000);&&&&&&&&&&&&int&*t=malloc(10000);&&&&&&&&&&&&free(p);&&&&&&&&&&&&free(q);&&&&&&&&&&&&free(s);&&&&&&&&&&&&free(t);&&&&&&&&}&&&&}&&&&ftime(&ts2);//停止计时&&&&t1=(TIME_T)ts1.time*1000+ts1.&&&&printf("t1=%lld\n",t1);&&&&t2=(TIME_T)ts2.time*1000+ts2.&&&&printf("t2=%lld\n",t2);&&&&ti=t2-t1;//获取时间间隔,ms为单位的&&&&return&}int&main(){&&&&int&ti=time_interval();&&&&printf("time&interval=%d\n",ti);}&不过其实如果只是单纯的获得时间的间隔的话,也不用考虑64位的问题,因为将两个时间的秒一级的耗时相减的话结果就比较小了,代码如下:#include&&stdio.h&#include&&sys/timeb.h&#include&&stdlib.h&#if&defined(WIN32)#&define&&TIMEB&&&&_timeb#&define&&ftime&&&&_ftime#else#define&TIMEB&timeb#endifint&time_interval(){&&&&struct&TIMEB&ts1,ts2;&&&&time_t&t_sec,&&&&ftime(&ts1);//开始计时&&&&//do&some&work&&&&{&&&&&&&&int&i;&&&&&&&&for(i=0;i&100000;i++)&&&&&&&&{&&&&&&&&&&&&int&*p=malloc(10000);&&&&&&&&&&&&int&*q=malloc(10000);&&&&&&&&&&&&int&*s=malloc(10000);&&&&&&&&&&&&int&*t=malloc(10000);&&&&&&&&&&&&free(p);&&&&&&&&&&&&free(q);&&&&&&&&&&&&free(s);&&&&&&&&&&&&free(t);&&&&&&&&}&&&&}&&&&ftime(&ts2);//停止计时&&&&t_sec=ts2.time-ts1.//计算秒间隔&&&&t_ms=ts2.millitm-ts1.//计算毫秒间隔&&&&ti=t_sec*1000+t_&&&&return&}int&main(){&&&&int&ti=time_interval();&&&&printf("time&interval=%d\n",ti);}
阅读(...) 评论()2003年7月 Java大版内专家分月排行榜第三
2003年7月 Java大版内专家分月排行榜第三
2003年7月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。如何计算毫秒级的时间差 - 推酷
如何计算毫秒级的时间差
计算毫秒级的时间差算是一个常见的需求吧…
手头上是windows编程的项目,所以首先就想到的是GetTickCount(),但
上这么说:
写个程序试一下吧:
1 #include &stdio.h&
2 #include &windows.h&
4 int main(void)
DWORD dwLastTime = GetTickCount();
for (int i = 0; i != 10; ++i)
DWORD dwCurrentTime = GetTickCount();
printf(&GetTickCount = %ldms TimeDiff = %ldms\n&, dwCurrentTime, dwCurrentTime - dwLastTime);
dwLastTime = dwCurrentT
Sleep(500);
可以看到,算了10次,每次偏差一般都有1ms,更有甚者,达到15ms,跟MSDN里说的实际精度一样。
所以, 用GetTickCount()计算毫秒级的时间差是不靠谱的 !
那下面,如何满足我们的需求呢?
需求1:计算毫秒级别的时间差。
需求2:返回值最好是unsigned long级别的,以便与现有代码保持兼容。
clock_t clock(void);
这个函数返回的是从程序启动到当前时刻所经历的CPU时钟周期数。将这个函数封装一下即可:
1 #include &ctime&
3 ULONG GetTickCountClock()
return (ULONG)((LONGLONG)clock() * 1000 / CLOCKS_PER_SEC);
测试结果:
通过SYSTEMTIME和FILETIME,我们可以得到距离日凌晨所经历的时间,单位是100纳秒。
这个时间肯定是足够精确了,但是得到的数值是一个LONGLONG,没关系,我们可以用这个时间来校准原生的GetTickCount()。
1 ULONG GetTickCountCalibrate()
static ULONG s_ulFirstCallTick = 0;
static LONGLONG s_ullFirstCallTickMS = 0;
SYSTEMTIME
GetLocalTime(&systemtime);
SystemTimeToFileTime(&systemtime, &filetime);
LARGE_INTEGER liCurrentT
liCurrentTime.HighPart = filetime.dwHighDateT
liCurrentTime.LowPart = filetime.dwLowDateT
LONGLONG llCurrentTimeMS = liCurrentTime.QuadPart / 10000;
if (s_ulFirstCallTick == 0)
s_ulFirstCallTick = GetTickCount();
if (s_ullFirstCallTickMS == 0)
s_ullFirstCallTickMS = llCurrentTimeMS;
return s_ulFirstCallTick + (ULONG)(llCurrentTimeMS - s_ullFirstCallTickMS);
测试结果:
每隔50ms获取一次当前时刻,对比TimeDiff与50之间的差距,统计1000次:
1 #include &math.h&
3 int main(void)
int nMaxDeviation = 0;
int nMinDeviation = 99;
int nSumDeviation = 0;
DWORD dwLastTime = GetTickCountCalibrate();
Sleep(50);
for (int i = 0; i != 1000; ++i)
DWORD dwCurrentTime = GetTickCountCalibrate();
int nDeviation= abs(dwCurrentTime - dwLastTime - 50);
nMaxDeviation = nDeviation & nMaxDeviation ? nDeviation : nMaxD
nMinDeviation = nDeviation & nMinDeviation ? nDeviation : nMinD
nSumDeviation += nD
dwLastTime = dwCurrentT
Sleep(50);
printf(&nMaxDeviation = %2dms, nMinDeviation = %dms, nSumDeviation = %4dms, AverDeviation = %.3fms\n&,
nMaxDeviation, nMinDeviation, nSumDeviation, nSumDeviation / 1000.0f);
比较 GetTickCount、 GetTickCountClock、 GetTickCountCalibrate的精度如下:
GetTickCount
nMaxDeviation = 13ms, nMinDeviation = 3ms, nSumDeviation = 5079ms, AverDeviation = 5.079ms
GetTickCountClock
nMaxDeviation =
2ms, nMinDeviation = 0ms, nSumDeviation =
4ms, AverDeviation = 0.004ms
GetTickCountCalibrate
nMaxDeviation =
1ms, nMinDeviation = 0ms, nSumDeviation =
3ms, AverDeviation = 0.003ms
可以看到,原生的GetTickCount误差过大,最大误差13ms,平均误差5ms,肯定无法满足毫秒级的计时需求。
GetTickCountClock与GetTickCountCalibrate在精度上相差无几,都可以满足毫秒级的计时需求。
区别在于, GetTickCountClock是从当前程序运行开始计时,GetTickCountCalibrate是从系统启动开始计时 。
4个字节的ULONG最大值是ms,也就是49.7天,超过这个值就会溢出。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致double&date1 = [[NSDate
date] timeIntervalSince1970] *
double date2&= [[NSDate
date] timeIntervalSince1970] *
double date = date2 - date1;
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8326次
排名:千里之外
原创:21篇
(4)(3)(9)(1)(2)(2)

我要回帖

更多关于 三相交流电峰值 的文章

 

随机推荐