Message-ID: <3C03C095.AEBDC2EC@yahoo.com> From: CBFalconer 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> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit 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 > #include > #include > #include > > //------------------------- > 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)