C# 스레드 Sleep 메서드란?
C#에서 Thread.Sleep 메서드는 현재 실행 중인 스레드를 지정한 시간 동안 일시적으로 멈추고 싶을 때 사용합니다. 특정 작업 사이에 대기 시간이 필요하거나, 스레드의 실행 흐름을 제어하고자 할 때 유용하게 활용됩니다.
예를 들어, 몇 초간 스레드를 재우(sleep)고 싶다면 다음과 같이 밀리초 단위의 값을 인수로 전달하면 됩니다.
int sleepfor = 2000;
Thread.Sleep(sleepfor);
위 코드에서 2000은 2000밀리초, 즉 2초를 의미합니다. Thread.Sleep은 항상 밀리초 단위로 시간을 받기 때문에, 초 단위로 표현하려면 값에 1000을 곱해주어야 한다는 점에 유의하세요.
스레드 Sleep 예제 코드
아래는 자식(child) 스레드를 생성한 뒤 Thread.Sleep으로 2초간 일시 정지시키는 완전한 C# 프로그램입니다. 직접 실행해 보면서 동작 방식을 확인할 수 있습니다.
using System;
using System.Threading;
namespace MyApplication {
class ThreadCreationProgram {
public static void CallToChildThread() {
Console.WriteLine("Child thread starts");
int sleepfor = 2000;
Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000);
Thread.Sleep(sleepfor);
Console.WriteLine("Child thread resumes");
}
static void Main(string[] args) {
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine("In Main: Creating the Child thread");
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
}
}
}
코드 설명
- ThreadStart 델리게이트: 자식 스레드가 실행할 메서드(CallToChildThread)를 지정합니다.
- childThread.Start(): 새 스레드를 시작하여 CallToChildThread 메서드를 별도의 실행 흐름에서 호출합니다.
- Thread.Sleep(2000): 자식 스레드가 2초 동안 일시 정지된 후 다시 실행을 이어갑니다.
실행 결과
위 프로그램을 컴파일하고 실행하면 콘솔에 다음과 같은 출력이 표시됩니다.
In Main: Creating the Child thread
Child thread starts
Child Thread Paused for 2 seconds
Child thread resumes
출력 결과에서 확인할 수 있듯이, 자식 스레드가 시작된 후 2초간 일시 정지되었다가 다시 재개되는 것을 알 수 있습니다. 이처럼 Thread.Sleep은 간단한 코드만으로도 스레드의 실행 타이밍을 손쉽게 제어할 수 있는 기본적이면서도 실용적인 메서드입니다.