2013-07-26 4 views

답변

7

Thread.sleep를가 (N)가 타임 슬라이스 (또는 스레드 퀀텀의 적어도 번호를 현재 스레드를 차단 의미하기 때문에 당신이 작업에 대해 완전히 잘못된 도구를 사용하는 것보다 당신의 타이밍이 중요한 경우) n은 밀리 초 내에 발생할 수 있습니다. 타임 슬라이스의 길이는 다른 Windows 버전과 다른 프로세서의 버전에 따라 달라지며 일반적으로 은 15 ~ 30 밀리 초입니다. 즉, 스레드가 거의 일 때 다른 컴퓨터에서 더 많은 시간 또는 n 밀리 초 동안 차단하도록 보장됩니다. 스레드가 정확히 을 다시 깨울 확률은 n 밀리 초가 지나면 불가능한만큼 불가능합니다. 그래서, Thread.Sleep은 타이밍을 위해 무의미합니다.

이 내용은 모두 here입니다.

참고 : 당신은 당신이

Thread.sleep를 함께 해결하려고하는 문제를 게시 할 경우

우리가 올바른 방향으로 당신을 안내 할 수있을 것

+0

+1 동의합니다. 'Thread.Sleep'은 정확한 타이밍을 보장하지 않습니다. –

+0

고맙습니다. 내 생각에, 나는 단지 Thread.Sleep (1)을 사용할 것이다. 필자는 실제 장치 측정 시퀀스를 시뮬레이션하여 차트에 표시합니다 (예 : pH, 전도도, 암페어 등 측정). 매우 큰 비율로 차트를 확장 할 수 있기 때문에 밀리 초까지 볼 수 있습니다. 사용자가 다른 기기에서 주파수를 요청하도록 설정할 수 있으므로 차트의 값을 사용자가 설정 한 시간 (밀리 초)으로 구분해야합니다. 그러나 이것이 쉬운 일이 아니라면 1ms 제한으로 살 수 있습니다. 그러나, 여전히 좋은 방법을 찾아내는 것이 좋다. – Kosmos

1

Thread.Sleep 밀리 초 단위의 정수가 아닌 값을 지원하지 않습니다. 서브 밀리 초 단위의 해상도가 없기 때문입니다. 실제로 해상도는 아마도 1 밀리 초 (아마도 하드웨어에 따라 15 밀리 초 또는 훨씬 더 높음)보다 훨씬 더 높을 것입니다. 데이터 유형을 결정할 때 API 설계자가이를 고려했다고 생각합니다.

그런데 두 가지 특별한 경우가 있습니다.

Thread.Sleep(0) - 이로 인해 스레드가 같거나 높은 우선 순위를 가진 다른 스레드에 양보하게됩니다.

Thread.Sleep(1) - 이렇게하면 스레드가 우선 순위에 관계없이 모든 스레드에 양보하게됩니다.