I wanted to replace a counter based while loop with the timer based while loop in C#.
Example :
while(count < 100000)
{
//do something
}
to
while(timer < X seconds)
{
//do something
}
I have two types of timers in C# .NET for this System.Timers
and Threading.Timers
.
Which one will be better to use and how.I don't want to add extra time consumption or threading issues with the timer.
You can't have timers in pure standard C.
In for loop, a loop variable is used to control the loop. First, initialize this loop variable to some value, then check whether this variable is less than or greater than the counter value. If the statement is true, then the loop body is executed and the loop variable gets updated.
What are Loops in C? Loop is used to execute the block of code several times according to the condition given in the loop. It means it executes the same code multiple times so it saves code and also helps to traverse the elements of an array.
What about using the Stopwatch class.
using System.Diagnostics;
//...
Stopwatch timer = new Stopwatch();
timer.Start();
while(timer.Elapsed.TotalSeconds < Xseconds)
{
// do something
}
timer.Stop();
Use a construct like this:
Timer r = new System.Timers.Timer(timeout_in_ms);
r.Elapsed += new ElapsedEventHandler(timer_Elapsed);
r.Enabled = true;
running = true;
while (running) {
// do stuff
}
r.Enabled = false;
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
running = false;
}
Be careful though to do this on the UI thread, as it will block input.
You can use Stopwatch
class instead of them, like;
Provides a set of methods and properties that you can use to accurately measure elapsed time.
Stopwatch sw = new Stopwatch();
sw.Start();
while (sw.Elapsed < TimeSpan.FromSeconds(X seconds))
{
//do something
}
From TimeSpan.FromSecond
Returns a TimeSpan that represents a specified number of seconds, where the specification is accurate to the nearest millisecond.
You might as well use the DateTime.Now.Ticks
counter:
long start = DateTime.Now.Ticks;
TimeSpan duration = TimeSpan.FromMilliseconds(1000);
do
{
//
}
while (DateTime.Now.Ticks - start < duration);
However, this seems to be something like busy waiting. That means that the loop will cause one core of your CPU to run at 100%. It will slow down other processes, speed up fans a.s.o. Although it depends on what you intend to do I would recommend to include Thread.Sleep(1)
in the loop.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With