TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

C# Sleep Method Pauses Programs

This C# example program shows the effect of the Sleep method from System.Threading.

Sleep pauses programs. It receives a value indicating the number of milliseconds to wait.

can be useful for waiting on an external application or task. It does not cause CPU usage during the pause.

Example. Sleep is found on the Thread class. It is a static method that receives one parameter. You must either include System.Threading or use the fully qualified name for the method invocation, which is System.Threading.Thread.Sleep.

Tip: You do not need to create a new Thread to use the Sleep method as it is static.

Static Method

Next: This example shows the runtime behavior of the Thread.Sleep method in the .NET Framework.

C# program that sleeps

using System;
using System.Diagnostics;
using System.Threading;

class Program
{
    static void Main()
    {
	//
	// Demonstrates three different ways of calling Sleep.
	//
	var stopwatch = Stopwatch.StartNew();
	Thread.Sleep(0);
	stopwatch.Stop();
	Console.WriteLine(stopwatch.ElapsedMilliseconds);
	Console.WriteLine(DateTime.Now.ToLongTimeString());

	stopwatch = Stopwatch.StartNew();
	Thread.Sleep(5000);
	stopwatch.Stop();
	Console.WriteLine(stopwatch.ElapsedMilliseconds);
	Console.WriteLine(DateTime.Now.ToLongTimeString());

	stopwatch = Stopwatch.StartNew();
	System.Threading.Thread.Sleep(1000);
	stopwatch.Stop();
	Console.WriteLine(stopwatch.ElapsedMilliseconds);

	//
	// Bonus: shows SpinWait method.
	//
	stopwatch = Stopwatch.StartNew();
	Thread.SpinWait(100000 * 10000);
	stopwatch.Stop();
	Console.WriteLine(stopwatch.ElapsedMilliseconds);
    }
}

Output

0              ElapsedMilliseconds after Sleep(0)
8:14:43 AM     Time after Sleep(0)
4999           ElapsedMilliseconds after Sleep(5000)
8:14:48 AM     Time after Sleep(5000)
999            ElapsedMilliseconds after Sleep(1000)
3144           ElapsedMilliseconds after SpinWait(Int32)

The program defines the Main entry point in the Program class, which contains three method invocations to the Thread.Sleep method with varying calling syntaxes and parameters. The results of the Console.WriteLine calls are shown.

Console.WriteLine

Note: The surrounding code around the Sleep invocations takes the system's time and uses Stopwatch to time the Thread.Sleep calls.

Stopwatch

Implementation. Next we review the implementation of the Thread.Sleep method and the Thread.SpinLock method in the .NET Framework. These two methods call into the SleepInternal and SpinWaitInternal functions in mscorlib.

Tip: Thread.Sleep likely will end up calling the same code in the Windows kernel that the Sleep call in any language uses.

SpinWait. When you execute the above program, you will notice that the program does not require significant CPU time when executing the Thread.Sleep calls. It only starts consuming the entire CPU core when the Thread.SpinWait method is invoked.

So: Sleep uses the operating system to "pause" the program, resulting in 0% CPU, while Thread.SpinWait executes useless instructions.

SpinWait

Summary. Thread.Sleep is fairly accurate in pausing the program for the specified number of milliseconds. It does not cause your program to consume 100% CPU. This will save power and provide more resources for other programs.

Finally: We noted the implementation in the .NET Framework and also talked about idle loops and SpinWait.


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf