1 module evael.utils.Functions; 2 3 import std.parallelism; 4 import std.datetime; 5 import std.array; 6 import std.traits; 7 8 import core.exception; 9 import core.stdc.string; 10 import core.thread; 11 12 immutable MonoTime startupTime; 13 14 shared static this() 15 { 16 startupTime = MonoTime.currTime; 17 } 18 19 void startTask(void delegate() func) 20 { 21 task(func).executeInNewThread(); 22 } 23 24 /** 25 * Starts a task after X time. 26 * Params: 27 * callback : task to execute 28 * interval : interval 29 */ 30 void startDelayedTask(void delegate() callback, in int interval) 31 { 32 task(() 33 { 34 Thread.sleep(interval.seconds); 35 callback(); 36 37 }).executeInNewThread(); 38 } 39 40 @nogc 41 Duration timeSinceProgramStarted() nothrow 42 { 43 return MonoTime.currTime - startupTime; 44 } 45 46 @nogc 47 float getCurrentTime() nothrow 48 { 49 return timeSinceProgramStarted.total!"msecs"; 50 } 51 52 @nogc 53 auto bindDelegate(T)(T t) nothrow 54 if(isDelegate!T) 55 { 56 static T dg; 57 58 dg = t; 59 60 extern(C) 61 static ReturnType!T func(ParameterTypeTuple!T args) 62 { 63 return dg(args); 64 } 65 66 return &func; 67 }