Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

patch timer #13

Open
wants to merge 1 commit into from

1 participant

@AxGord

No description provided.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Sep 3, 2012
  1. @AxGord

    patch timer

    AxGord authored
This page is out of date. Refresh to see the latest.
Showing with 128 additions and 0 deletions.
  1. +128 −0 haxe/Timer.hx
View
128 haxe/Timer.hx
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2005, The haXe Project Contributors
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE HAXE PROJECT CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE HAXE PROJECT CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+package haxe;
+
+#if nodejs
+import js.Node;
+#end
+
+/**
+ The Timer class allows you to create asynchronous timers on platforms that support events.
+**/
+class Timer {
+ #if (neko || php || cpp)
+ #else
+
+ private var id : Null<Int>;
+
+ /**
+ Create a new timer that will run every [time_ms] (in milliseconds).
+ **/
+ public function new( time_ms : Int ){
+ #if flash9
+ var me = this;
+ id = untyped __global__["flash.utils.setInterval"](function() { me.run(); },time_ms);
+ #elseif flash
+ var me = this;
+ id = untyped _global["setInterval"](function() { me.run(); },time_ms);
+ #elseif js
+ #if nodejs
+ var me = this;
+ id = Node.setInterval(function() me.run(), time_ms);
+ #else
+ var me = this;
+ id = untyped window.setInterval(function() me.run(), time_ms);
+ #end
+ #end
+ }
+
+ /**
+ Stop the timer definitely.
+ **/
+ public function stop() {
+ if( id == null )
+ return;
+ #if flash9
+ untyped __global__["flash.utils.clearInterval"](id);
+ #elseif flash
+ untyped _global["clearInterval"](id);
+ #elseif js
+ #if nodejs
+ Node.clearInterval(id);
+ #else
+ untyped window.clearInterval(id);
+ #end
+ #end
+ id = null;
+ }
+
+ /**
+ This is the [run()] method that is called when the Timer executes. It can be either overriden in subclasses or directly rebinded with another function-value.
+ **/
+ public dynamic function run() {
+ }
+
+ /**
+ This will delay the call to [f] for the given time. [f] will only be called once.
+ **/
+ public static function delay( f : Void -> Void, time_ms : Int ) {
+ var t = new haxe.Timer(time_ms);
+ t.run = function() {
+ t.stop();
+ f();
+ };
+ return t;
+ }
+
+ #end
+
+ /**
+ Measure the time it takes to execute the function [f] and trace it. Returns the value returned by [f].
+ **/
+ public static function measure<T>( f : Void -> T, ?pos : PosInfos ) : T {
+ var t0 = stamp();
+ var r = f();
+ Log.trace((stamp() - t0) + "s", pos);
+ return r;
+ }
+
+ /**
+ Returns the most precise timestamp, in seconds. The value itself might differ depending on platforms, only differences between two values make sense.
+ **/
+ public static function stamp() : Float {
+ #if flash
+ return flash.Lib.getTimer() / 1000;
+ #elseif (neko || php)
+ return Sys.time();
+ #elseif js
+ return Date.now().getTime() / 1000;
+ #elseif cpp
+ return untyped __global__.__time_stamp();
+ #else
+ return 0;
+ #end
+ }
+
+}
Something went wrong with that request. Please try again.