This is Timer.m in view mode; [Download] [Up]
#import "Timer.h"
@implementation Timer
-tare
{
struct timezone tzone1;
struct timeval realtime1;
struct timeval realtime2;
if(!noPS) NXPing();
gettimeofday(&realtime1,&tzone1);
if(!noPS) NXPing();
gettimeofday(&realtime2,&tzone1);
tare = (-realtime1.tv_sec + realtime2.tv_sec) +
(-realtime1.tv_usec+ realtime2.tv_usec)/1.0E6;
cumWallTime=0;
return self;
}
-wallEnter
{
if(!noPS) NXPing();
gettimeofday(&realtime,&tzone);
synctime = realtime.tv_sec +realtime.tv_usec/1.0E6;
return self;
}
-wallLeave
{
double eTime;
if(!noPS) NXPing();
gettimeofday(&realtime,&tzone);
eTime = (-synctime + realtime.tv_sec
+ realtime.tv_usec /1.0E6) - tare;
cumWallTime += eTime;
return self;
}
-psEnter
{
if(!noPS) PSusertime(&stime);
getrusage(RUSAGE_SELF,&rtime);
pssynctime = (rtime.ru_utime.tv_sec +
rtime.ru_stime.tv_sec) +
(rtime.ru_utime.tv_usec +
rtime.ru_stime.tv_usec)
/1.0E6;
return self;
}
-psLeave
{
int et;
double appTime;
double psTime;
getrusage(RUSAGE_SELF,&rtime);
appTime = ((rtime.ru_utime.tv_sec +
rtime.ru_stime.tv_sec) +
(rtime.ru_utime.tv_usec +
rtime.ru_stime.tv_usec)
/1.0E6) -pssynctime;
cumAppTime += appTime;
if(!noPS) PSusertime(&et);
psTime = ((et-stime)/1000.0);
cumPSTime += psTime;
return self;
}
- startTimer
{
running = 1;
[self tare];
[self wallEnter];
if(!noPS) [self psEnter];
return self;
}
- stopTimer
{
if(running){
[self wallLeave];
[self psLeave];
running = 0;
}
return self;
}
- (double) wallTime
{
return cumWallTime;
}
- (double) appTime
{
return cumAppTime;
}
- (double) psTime
{
return cumPSTime;
}
- (const char *)timeString
{
static char buf[256];
sprintf(buf,"TIMES: \t%5.1f (wall) \t%5.1f (sys) \t%5.1f (win)",
[self wallTime],[self appTime],[self psTime]);
return buf;
}
- setNoPS:(BOOL)flag
{
noPS = flag;
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.