delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/11/27/12:49:35

Message-ID: <3C03C095.AEBDC2EC@yahoo.com>
From: CBFalconer <cbfalconer AT yahoo DOT com>
Organization: Ched Research
X-Mailer: Mozilla 4.75 [en] (Win98; U)
X-Accept-Language: en
MIME-Version: 1.0
Newsgroups: comp.os.msdos.djgpp
Subject: Re: uclock() and struct rusage
References: <3C03503F DOT E9AE61D3 AT bigfoot DOT com>
Lines: 194
Date: Tue, 27 Nov 2001 17:32:04 GMT
NNTP-Posting-Host: 12.90.171.162
X-Complaints-To: abuse AT worldnet DOT att DOT net
X-Trace: bgtnsc06-news.ops.worldnet.att.net 1006882324 12.90.171.162 (Tue, 27 Nov 2001 17:32:04 GMT)
NNTP-Posting-Date: Tue, 27 Nov 2001 17:32:04 GMT
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

*** Posted and mailed ***
Alex Vinokur wrote:
> 
> ===============================================================
> Windows98
> gpp : GNU C++ version 2.95.3 20010315/djgpp (release) (djgpp)
>       compiled by GNU C version 2.95.3 20010315/djgpp (release).
> ===============================================================
> 
> It seems that it is preferable to use uclock()
>    instead of 'struct rusage' to get user time used by process
> Resolution of uclock() is higher than 'struct rusage'.
> 
> UCLOCKS_PER_SEC is 1193180 // in time.h
> 
> See a test below.
> Wee can we that sometimes 'struct rusage' returns 0 sec (when used time
> is too small).
> 
> Nevertheless, is there any situations that
>   it is worth using 'struct rusage' instead uclock()?
> 
> Answer#1. uclock() is non portable.
> 
>   Something else ?
> 
> //------------- C++ Code : BEGIN -------------
> 
> #include <iostream>
> #include <sys/time.h>
> #include <sys/resource.h>
> #include <utime.h>
> 
> //-------------------------
> uclock_t start_uclock_time;
> uclock_t end_uclock_time;
> struct rusage start_rusage_time;
> struct rusage end_rusage_time;
> 
> //-------------------------
> void set_start_time()
> {
>   start_uclock_time = uclock();
>   getrusage(RUSAGE_SELF, &start_rusage_time);
> }
> 
> //-------------------------
> void set_end_time()
> {
>   end_uclock_time = uclock();
>   getrusage(RUSAGE_SELF, &end_rusage_time);
> }
> 
> //-------------------------
> void show_user_used_time()
> {
> uclock_t used_uclock_time = end_uclock_time - start_uclock_time;
>   cout << "User time used : "
>  << used_uclock_time
>  << " uclocks"
>  << endl;
> 
> double user_rusage_time = (end_rusage_time.ru_utime.tv_sec -
> start_rusage_time.ru_utime.tv_sec)
>     + (end_rusage_time.ru_utime.tv_usec -
> start_rusage_time.ru_utime.tv_usec)/ 1.0e6;
> 
>   cout << "User time used : "
>  << user_rusage_time
>  << " sec"
>  << endl;
> 
>   cout << endl;
> }
> 
> //------------
> int main ()
> {
> #define TOTAL1 20
> #define TOTAL2 1000000
> 
>   for (int i1 = 0; i1 < TOTAL1; i1++)
>   {
>     cout << "\t##### " << (i1 + 1) << " #####" << endl;
>     set_start_time();
>     for (int i2 = 0; i2 < TOTAL2; i2++)
>     {
>     }
>     set_end_time();
>     show_user_used_time();
>   }
> 
>   return 0;
> }
> 
> //-------------- C++ Code : END --------------
> 
> //-------------- Running : BEGIN -------------
> 
> %a.exe
>  ##### 1 #####
> User time used : 8709 uclocks
> User time used : 0 sec
> 
>  ##### 2 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 3 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 4 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 5 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 6 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 7 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 8 #####
> User time used : 41603 uclocks
> User time used : 0.054945 sec
> 
>  ##### 9 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 10 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 11 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 12 #####
> User time used : 9955 uclocks
> User time used : 0.054945 sec
> 
>  ##### 13 #####
> User time used : 8707 uclocks
> User time used : 0 sec
> 
>  ##### 14 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 15 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 16 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 17 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 18 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
>  ##### 19 #####
> User time used : 29672 uclocks
> User time used : 0.054945 sec
> 
>  ##### 20 #####
> User time used : 8706 uclocks
> User time used : 0 sec
> 
> //--------------- Running : END --------------

I expect this is not even portable under W98.  I hope to try it
later using the identical compiler, etc., but running on this '486
system.  I expect it will crash with an 'illegal instruction'
failing.

-- 
Chuck F (cbfalconer AT yahoo DOT com) (cbfalconer AT XXXXworldnet DOT att DOT net)
   Available for consulting/temporary embedded and systems.
   (Remove "XXXX" from reply address. yahoo works unmodified)
   mailto:uce AT ftc DOT gov  (for spambots to harvest)


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019