2016-01-12 2 views
0

Возможно ли создать таймер в C# без использования System.Timers.Timer или System.Threading.Timer?Как создать таймер в C# без использования System.Timers.Timer или System.Threading.Timer

Я использую таймеры в проекте Unity (C#), и я пытаюсь экспортировать проект WebGL. На данный момент потоки в Unity WebGL не поддерживаются.

И кажется, что использование события System.Timers.Timer > Elapsed выполняется по отдельной теме. (?)

+0

если есть еще один «Таймер»? – tchelidze

+1

Да, это возможно. Просто используйте 'System.Windows.Forms.Timer';) –

+7

Можно ли рассказать нам о причине и цели этого вопроса? – TaW

ответ

0

Я думаю, что вы можете сделать что-то вроде:

public class MyTimer : MonoBehaviour 
{ 
float myTime = 0.0f; 
void Update() 
{ 
UpdateTime(); 
} 

public void UpdateTime() 
{ 
myTime += Time.deltaTime; 
} 

} 
+0

Я не использую это внутри MonoBehaviour, поэтому это решение не сработает для меня. – hex

+0

Умереть вы проверите это с помощью webgl? Умирает? – JBJ

1

A C# Таймер имеет возможность вызвать функцию обратного вызова по истечении заданного времени прошло, и, таким образом, проходит проверку в отдельном потоке.

Если вам не все равно, сколько времени прошло, и вы не хотите использовать возможности Unity Time.deltaTime, вы можете использовать DateTime для отслеживания времени. Вот базовый примерный класс, который обеспечивает такое поведение.

public class SimpleTimer 
{ 
    private DateTime StartTime; 
    private DateTime LastTime; 
    private bool running; 

    public double ElaspedTime { get { return GetElapsedTime(); } } 

    public void Start() 
    { 
     StartTime = DateTime.Now; 
     running = true; 
    } 

    public void Restart() 
    { 
     Start(); 
    } 

    public double GetElapsedTime() 
    { 
     if (!running) 
      throw new Exception("SimpleTimer not running! Must call Start() prior to querying the Elapsed Time."); 

     LastTime = DateTime.Now; 
     var elaspedTime = LastTime - StartTime; 

     return elaspedTime.TotalMilliseconds; 
    } 

    public double GetElapsedTimeAndRestart() 
    { 
     var elaspedTime = GetElapsedTime(); 
     Restart(); 

     return elaspedTime; 
    } 
} 

... и вот пример использования:

var timer = new SimpleTimer(); 
timer.Start(); 

//Prints the total time each iteration 
for(var i = 1; i <=1000; i++) 
{ 
    System.Threading.Thread.Sleep(5); 
    Console.WriteLine("Loop " + i + ": Elasped Time = " + timer.ElaspedTime + " ms"); 
} 

timer.Restart(); 

//Prints roughly 5ms each iteration 
for (var i = 1; i <= 1000; i++) 
{ 
    System.Threading.Thread.Sleep(5);     
    Console.WriteLine("Loop " + i + ": Elasped Time = " + timer.ElaspedTime + " ms"); 
    timer.Restart(); 
} 

Это может быть расширена, чтобы вызвать функцию после того, как желаемое истекшее время было достигнуто, но вам нужно будет поместить вызов к методу проверки какое-то место в вашем коде, которое запускается часто и последовательно. (Как в петле FSM)

Надеюсь, это поможет!

 Смежные вопросы

  • Нет связанных вопросов^_^