⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timing.c

📁 Linux下ztelnet 的rz、sz源码
💻 C
字号:
/*  timing.c - Timing routines for computing elapsed wall time  Copyright (C) 1994 Michael D. Black  Copyright (C) 1996, 1997 Uwe Ohse  This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2, or (at your option)  any later version.  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  originally written by Michael D. Black, mblack@csihq.com*/#include "zglobal.h"#include "timing.h"#if HAVE_SYS_PARAM_H#include <sys/param.h>#endif#if !defined(TIME_WITH_SYS_TIME) && !defined(HAVE_SYS_TIME_H)   /* can't use gettimeofday without struct timeval */#  undef HAVE_GETTIMEOFDAY#endif/* Prefer gettimeofday to ftime to times.  */#if defined(HAVE_GETTIMEOFDAY)#  undef HAVE_FTIME#  undef HAVE_TIMES#else#  if defined(HAVE_FTIME)#    undef HAVE_TIMES#  endif#endif#ifdef HAVE_FTIME#  include <sys/timeb.h>#endif#ifdef HAVE_TIMES#  if HAVE_SYS_TIMES_H#    include <sys/times.h>#  endif#  ifdef _SC_CLK_TCK#    define HAVE_SC_CLK_TCK 1#  else#    define HAVE_SC_CLK_TCK 0#  endif/* TIMES_TICK may have been set in policy.h, or we may be able to get   it using sysconf.  If neither is the case, try to find a useful   definition from the system header files.  */#  if !defined(TIMES_TICK) && (!defined(HAVE_SYSCONF) || !defined(HAVE_SC_CLK_TCK))#    ifdef CLK_TCK#      define TIMES_TICK CLK_TCK#    else /* ! defined (CLK_TCK) */#      ifdef HZ#        define TIMES_TICK HZ#      endif /* defined (HZ) */#    endif /* ! defined (CLK_TCK) */#else#  endif /* TIMES_TICK == 0 && (! HAVE_SYSCONF || ! HAVE_SC_CLK_TCK) */#  ifndef TIMES_TICK#    define TIMES_TICK 0#  endif#endif /* HAVE_TIMES */#ifdef HAVE_GETTIMEOFDAY/* collides with Solaris 2.5 prototype? *//* int gettimeofday (struct timeval *tv, struct timezone *tz); */#endifdouble timing (int reset, time_t *nowp){  static double elaptime, starttime, stoptime;  double yet;#define NEED_TIME#ifdef HAVE_GETTIMEOFDAY  struct timeval tv;  struct timezone tz;#ifdef DST_NONE  tz.tz_dsttime = DST_NONE;#else  tz.tz_dsttime = 0;#endif  gettimeofday (&tv, &tz);  yet=tv.tv_sec + tv.tv_usec/1000000.0;#undef NEED_TIME#endif#ifdef HAVE_FTIME	static int fbad=0;	if (! fbad)	{		struct timeb stime;		static struct timeb slast;		(void) ftime (&stime);		/* On some systems, such as SCO 3.2.2, ftime can go backwards in		   time.  If we detect this, we switch to using time.  */		if (slast.time != 0			&& (stime.time < slast.time			|| (stime.time == slast.time && stime.millitm < slast.millitm)))			fbad = 1;		else		{			yet = stime.millitm / 1000.0  + stime.time;			slast = stime;		}	}	if (fbad)		yet=(double) time(NULL);#undef NEED_TIME#endif#ifdef HAVE_TIMES  struct tms s;  long i;  static int itick;  if (itick == 0)    {#if TIMES_TICK == 0#if HAVE_SYSCONF && HAVE_SC_CLK_TCK      itick = (int) sysconf (_SC_CLK_TCK);#else /* ! HAVE_SYSCONF || ! HAVE_SC_CLK_TCK */      const char *z;      z = getenv ("HZ");      if (z != NULL)        itick = (int) strtol (z, (char **) NULL, 10);      /* If we really couldn't get anything, just use 60.  */      if (itick == 0)        itick = 60;#endif /* ! HAVE_SYSCONF || ! HAVE_SC_CLK_TCK */#else /* TIMES_TICK != 0 */      itick = TIMES_TICK;#endif /* TIMES_TICK == 0 */    }  yet = ((double) times (&s)) / itick;#undef NEED_TIME#endif#ifdef NEED_TIME	yet=(double) time(NULL);#endif  if (nowp)    *nowp=(time_t) yet;  if (reset) {    starttime = yet;    return starttime;  }  else {    stoptime = yet;    elaptime = stoptime - starttime;    return elaptime;  }}/*#define TEST*/#ifdef TESTmain(){	int i;	printf("timing %g\n",timing(1));	printf("timing %g\n",timing(0));	for(i=0;i<20;i++){	sleep(1);	printf("timing %g\n",timing(0));	}}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -