| delorie.com/archives/browse.cgi | search |
| 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)
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |