summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
@@ -6,3 +6,3 @@
/*
- * Copyright (c) 2010, Isode Limited, London, England.
+ * Copyright (c) 2010-2018, Isode Limited, London, England.
* All rights reserved.
@@ -11,6 +11,5 @@ 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;
@@ -18,5 +17,5 @@ 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_;
@@ -30,8 +29,8 @@ 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);
}
@@ -41,10 +40,12 @@ class JavaTimer extends Timer {
}
- }
- 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);
+ }
+ }
}
@@ -58,2 +59,3 @@ class JavaTimer extends Timer {
running_ = false;
+ timer_.eventLoop_.removeEventsFromOwner(this);
}
@@ -87,10 +89,11 @@ class JavaTimer extends Timer {
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");
+ }
}