-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTimer.java
78 lines (64 loc) · 2.65 KB
/
Timer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// $Id$
//
// Cassowary Incremental Constraint Solver
// Original Smalltalk Implementation by Alan Borning
// This Java Implementation by Greg J. Badros, <[email protected]>
// http://www.cs.washington.edu/homes/gjb
// (C) 1998, 1999 Greg J. Badros and Alan Borning
// See ../LICENSE for legal details regarding this software
//
// Timer, adapted from John P. Russo's C++ Timer class
package EDU.Washington.grad.gjb.cassowary;
public class Timer
{
public Timer() {
TimerIsRunning = false; // Start not yet called.
ElapsedMs = 0; // No time on timer object yet.
}
public void Start() {
// Stopwatch is now running
TimerIsRunning = true;
// Look at internal clock and remember reading
StartReading = System.currentTimeMillis();
}
public void Stop() {
TimerIsRunning = false; // Stop timer object.
ElapsedMs += System.currentTimeMillis() - StartReading;
}
// Clears a Timer of previous elapsed times, so that a new event
// can be timed.
public void Reset() {
TimerIsRunning = false; // Start not yet called.
ElapsedMs = 0; // No time on timer object yet.
}
// The data member, "TimerIsRunning" is used to keep track of
// whether a timer is active, i.e. whether an event is being
// timed. While we want those using the timer class to know when a
// timer is active, we do NOT want them to directly access the
// TimerIsRunning variable. We solve this problem, by making
// TimerIsRunning private and providing the public "access function"
// below.
public boolean IsRunning() {
return TimerIsRunning;
}
// This function allows a client to determine the amount of time that has
// elapsed on a timer object. Note that there are two possibilities:
// 1) A timer object has been started and stopped. We can detect this
// case, because the variable "TimerIsRunning" is false.
// 2) A timer object is "running", i.e. is still in the process of timing
// an event. It is not expected that this case will occur as frequently
// as case 1).
// In either case, this function converts ticks to seconds. Note that
// since the function TicksPerSecond() returns a value of type double,
// an implicit type conversion takes place before doing the division
// required in either case.
public double ElapsedTime() {
if ( !TimerIsRunning ) // Normal case
return (double) ElapsedMs/1000;
else
return (double) (ElapsedMs + System.currentTimeMillis() - StartReading)/1000;
}
private boolean TimerIsRunning;
private long ElapsedMs;
private long StartReading;
}