首页 > 其他分享 >clock函数返回负值

clock函数返回负值

时间:2022-12-26 10:23:21浏览次数:78  
标签:负值 tz struct clock tv timeval gettimeofday 函数

使用clock() 函数来进行计时,时不时的返回一个很大的负数,怎么检查也检查不出错误,现在找出错误原因,给大家分享一下。

来源网页:http://kebe-jea.blogbus.com/logs/33603387.html

跑实验的时候,结果时不时出现统计时间是负数的问题……开始以为是逻辑错误,程序调了个底儿掉,没找到错误。今天突然意识到应该是计时出了问题,clock()返回的是长整数,加上linux下的CLOCKS_PER_SEC是1000000(Windows下这个数是1000,难怪原来用的时候没有发现问题),运行时间长了自然会越界,然后会滚回滚。

之后翻clock的帮助文档,发现里边写到

Note that the time can wrap around. On a 32-bit system where CLOCKS_PER_SEC equals 1000000 this function will return the same value approximately every 72 minutes.

我每次开始记录下clock()返回值,结束时记录下,做差,记录结果,难怪会出错,而且可重复性那么差,半个小时才重现一次错误。

发现了问题,接着就得找解决方法。找来找去(其中在碧海青天C版版主同学帮助下,顺便强烈感谢) 知道了用timeval结构体能解决问题。

timeval里边有俩成员,tv_sec 的单位是秒;tv_usec 的单位是 1 / CLOCKS_PER_SEC = 0.000001秒,记录时间的时候用gettimeofday函数,下面摘自man gettimeofday

复制代码
#include <sys/time.h>

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

  int settimeofday(const struct timeval *tv, const struct timezone *tz);

  Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

  settimeofday(): _BSD_SOURCE

DESCRIPTION
  The functions gettimeofday() and settimeofday() can get and set the
  time as well as a timezone. The tv argument is a struct timeval (as
  specified in <sys/time.h>):

  struct timeval {
  time_t tv_sec; /* seconds */
  suseconds_t tv_usec; /* microseconds */
  };

  and gives the number of seconds and microseconds since the Epoch (see
  time(2)). The tz argument is a struct timezone:

  struct timezone {
  int tz_minuteswest; /* minutes west of Greenwich */
  int tz_dsttime; /* type of DST correction */
  };

这样计算时差就很容易了,

timeval tv, tv1;  
gettimeofday(&tv, 0); 
//blah blah
gettimeofday(&tv1, 0); 
cout<<(tv1.tv_sec - tv.tv_sec + (double)(tv1.tv_usec - tv.tv_usec) / CLOCKS_PER_SEC)<<endl;
复制代码

标签:负值,tz,struct,clock,tv,timeval,gettimeofday,函数
From: https://www.cnblogs.com/kn-zheng/p/17005108.html

相关文章

  • Python函数用法和底层分析
    目录Python函数用法和底层分析函数的基本概念Python函数的分类核心要点形参和实参文档字符串(函数的注释)返回值函数也是对象,内存底层分析变量的作用域(全局变量和局部变......
  • OpenCV中Denoising相关函数的简单介绍
    参考:http://wenhuix.github.io/research/denoise.html一、基本情况      (一)基本方法     Fast Non-Local MeansDenoising(FNLMD),论文为  ......
  • Vue之Render函数
    关于不同版本的Vue:   1.vue.js与vue.runtime.xxx.js的区别:      (1).vue.js是完整版的Vue,包含:核心功能+模板解析器。      (2).vue.runt......
  • 特征点寻找的基础数据结构和函数
       当进行跟踪时或者其他类型的用到关键点及其描述符的分析时,通常需要做三件事情:第一个是根据一些关键点的定义搜索图像并查找该图像中的所有关键点;第二个是为发现......
  • 内联函数和重载函数
    内联函数我们知道函数调用是有时间开销的,当函数本身只有几条语句,而函数本身却被反复执行很多次时,函数调用的开销就会显得比较大,为了减小这种函数调用的开销,就引入了内联......
  • C++11:支持函数模板的默认模板参数
    在C++98/03标准中,类模板可以有默认的模板参数,如下:template<typenameT,typenameU=int,UN=0>structFoo{//...};但是却不支持函数的默认模板参数:te......
  • C++类模板、函数模板
    类模板的声明需要template<typename类型参数>,等于C#中的泛型类,如List<T>。template<typenameT>classComplex{public://构造函数Complex(Ta,Tb)......
  • 函数
    函数函数的作用什么是函数用来完成一定的功能。函数名即给对应功能起一个名字为什么要使用函数?事先编好一批常用的函数来实现各种不同的功能,把它们保存在函数库中。需......
  • Python中使用zip函数的七重境界
    1.引言Python中有一些内置函数,可以使我们的代码非常优雅。​​zip​​函数就是其中之一,但是zip函数的使用对于初学者来说不是很直观,有时容易出错。因此本文将从7个层次来......
  • 【模式识别】判别函数和感知机算法
    给定两个类别的一共8个样本,通过感知机算法求解判别函数defbi_perception():X1=np.array([[0,0,0],[1,0,0],[1,0,1],......