본문 바로가기
컴퓨터/C#

C# Thread.Sleep 사용할 때 주의할 점

by Begi 2021. 7. 12.
반응형

Thread.Sleep의 단위는 ms이지만 실제 시간 정밀도는 ms 단위가 아니다. 윈도우나 CPU에 따라 다르지만 대략 15~30ms 정도의 정밀도이다. 즉, Thread.Sleep(5)라고 해도 5ms 지연이 되지 않고 지연시간이 계속해서 변하면서 20ms 지연이 되기도 하고 1ms가 되기도 한다.

 

Threas.Sleep은 새로운 쓰레드를 만들어 실행되기 때문에 메모리의 자원 낭비가 심하다.

 

정밀한 시간 지연을 위해서는 Stopwatch를 사용한다.

 

    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();
    while (stopWatch.ElapsedMilliseconds < 40) {}

 

    stopWatch.Stop();
    TimeSpan ts = stopWatch.Elapsed;
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:000}",ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds);

 

※ 주의: Stopwatch를 이용하여 시간 지연을 구현하면 시간은 정밀하지만 CPU 리소스 낭비가 심하다. Stopwatch을 사용하면 무한루프를 계속 돌기 때문에 컴퓨터가 느려질 수 있다.

 

반응형

'컴퓨터 > C#' 카테고리의 다른 글

C# 화면에 줄 표시하기  (0) 2021.08.10
C# 문자열 - 숫자 변환  (0) 2021.07.12
C# 데이터 형식 크기  (0) 2020.11.29
C# Setting 설정화면  (0) 2020.07.30
C# TransparencyKey 해제  (0) 2020.07.30

댓글