summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode')
-rw-r--r--src/com/isode/stroke/network/JavaTimer.java47
1 files changed, 25 insertions, 22 deletions
diff --git a/src/com/isode/stroke/network/JavaTimer.java b/src/com/isode/stroke/network/JavaTimer.java
index ac9e219..2baae3d 100644
--- a/src/com/isode/stroke/network/JavaTimer.java
+++ b/src/com/isode/stroke/network/JavaTimer.java
@@ -4,21 +4,20 @@
* See Documentation/Licenses/GPLv3.txt for more information.
*/
/*
- * Copyright (c) 2010, Isode Limited, London, England.
+ * Copyright (c) 2010-2018, Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.network;
-import java.util.Date;
-
import com.isode.stroke.eventloop.Event;
import com.isode.stroke.eventloop.EventLoop;
+import com.isode.stroke.eventloop.EventOwner;
class JavaTimer extends Timer {
- private class TimerRunnable implements Runnable {
+ private class TimerRunnable implements Runnable,EventOwner {
- boolean running_ = true;
+ private boolean running_ = true;
private final EventLoop eventLoop_;
private final long milliseconds_;
@@ -28,25 +27,27 @@ class JavaTimer extends Timer {
}
public void run() {
- long endTime = new Date().getTime() + milliseconds_;
- while (shouldEmit() && new Date().getTime() < endTime) {
+ long endTime = System.currentTimeMillis() + milliseconds_;
+ while (shouldEmit() && System.currentTimeMillis() < endTime) {
try {
- long timeToWait = endTime - new Date().getTime();
+ long timeToWait = endTime - System.currentTimeMillis();
if (timeToWait > 0) {
- Thread.sleep(milliseconds_);
+ Thread.sleep(timeToWait);
}
} catch (InterruptedException ex) {
// Needs to be caught, but won't break out of the loop
// unless end time reached or stop() has been called.
}
- }
- if (shouldEmit()) {
- eventLoop_.postEvent(new Event.Callback() {
- public void run() {
- onTick.emit();
- }
- });
- }
+ }
+ synchronized(this) {
+ if (shouldEmit()) {
+ eventLoop_.postEvent(new Event.Callback() {
+ public void run() {
+ onTick.emit();
+ }
+ },this);
+ }
+ }
}
@@ -56,6 +57,7 @@ class JavaTimer extends Timer {
public synchronized void stop() {
running_ = false;
+ timer_.eventLoop_.removeEventsFromOwner(this);
}
}
@@ -85,14 +87,15 @@ class JavaTimer extends Timer {
@Override
public void stop() {
timer_.stop();
- //FIXME: This needs to clear any remaining events out of the EventLoop queue.
}
-
+
@Override
public String toString() {
- return "JavaTimer for " + timer_.milliseconds_ +
- " milliseconds " +
- (timer_.running_ ? "running" : "not running");
+ synchronized (timer_) {
+ return "JavaTimer for " + timer_.milliseconds_ +
+ " milliseconds " +
+ (timer_.running_ ? "running" : "not running");
+ }
}
private final TimerRunnable timer_;
}