using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Collections;
+using System.Runtime.CompilerServices;
namespace System.Threading
{
return true;
}
} else {
- nr = dueTime * TimeSpan.TicksPerMillisecond + DateTime.GetTimeMonotonic ();
+ nr = dueTime * TimeSpan.TicksPerMillisecond + GetTimeMonotonic ();
}
scheduler.Change (this, nr);
return true;
}
+ // extracted from ../../../../external/referencesource/mscorlib/system/threading/timer.cs
+ internal void KeepRootedWhileScheduled()
+ {
+ }
+
+ // TODO: Environment.TickCount should be enough as is everywhere else
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ static extern long GetTimeMonotonic ();
+
sealed class TimerComparer : IComparer {
public int Compare (object x, object y)
{
var new_time = new List<Timer> (512);
while (true) {
int ms_wait = -1;
- long ticks = DateTime.GetTimeMonotonic ();
+ long ticks = GetTimeMonotonic ();
lock (this) {
changed.Reset ();
//PrintList ();
if (no_more) {
timer.next_run = Int64.MaxValue;
} else {
- timer.next_run = DateTime.GetTimeMonotonic () + TimeSpan.TicksPerMillisecond * timer.period_ms;
+ timer.next_run = GetTimeMonotonic () + TimeSpan.TicksPerMillisecond * timer.period_ms;
new_time.Add (timer);
}
}
//PrintList ();
ms_wait = -1;
if (min_next_run != Int64.MaxValue) {
- long diff = (min_next_run - DateTime.GetTimeMonotonic ()) / TimeSpan.TicksPerMillisecond;
+ long diff = (min_next_run - GetTimeMonotonic ()) / TimeSpan.TicksPerMillisecond;
if (diff > Int32.MaxValue)
ms_wait = Int32.MaxValue - 1;
else {