> 백엔드 개발 > C++ > 본문

WinAPI Sleep(1)이 15밀리초 동안 일시 중지되는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-25 08:47:28
원래의
372명이 탐색했습니다.

Why Does WinAPI Sleep(1) Result in a 15 Millisecond Pause?

WinAPI Sleep() 함수 지속 시간 불일치 이해

WinAPI Sleep() 함수를 1밀리초 매개변수로 호출하면 스레드가 실제로 훨씬 더 긴 기간(일반적으로 약 15밀리초) 동안 일시 중지되는 것으로 관찰되었습니다. 이러한 현상은 잠재적인 시스템 문제에 대한 우려를 불러일으킵니다.

Windows의 시간 양자화

Windows는 스레드 예약을 위해 시간 양자화 메커니즘을 사용합니다. 이는 시스템이 퀀텀이라고 알려진 개별 간격으로 스레드를 예약한다는 의미입니다. 이러한 간격의 정확한 기간은 Windows 버전 및 에디션을 포함한 여러 요인에 따라 다릅니다. 평균적으로 Windows 7은 약 15.6밀리초의 시간 할당량으로 작동합니다.

Sleep() 기간에 미치는 영향

시간 양자화의 결과로 0이 아닌 모든 Sleep()에 제공된 지연 인수는 가장 가까운 퀀텀으로 반올림됩니다. 이는 Sleep(1) 호출이 실제로 1밀리초에 가장 가까운 시간 할당량인 15밀리초 동안 스레드를 일시 중지하는 이유를 설명합니다.

확인

이 동작을 확인하려면 , 제공된 코드 조각을 실행할 수 있습니다. 코드를 실행하면 시스템의 타이머 확인 설정에 따라 다른 결과가 나올 수 있습니다. 시스템 전체 타이머 해상도를 수동으로 1밀리초로 설정한 경우 절전 시간이 더 짧아질 수 있습니다. 그러나 Windows 7에서는 기본적으로 15.6밀리초의 타이머 해상도를 사용하므로 절전 시간이 길어집니다.

결론

Sleep() 함수의 불일치 지속 시간은 Windows 스레드 스케줄러의 고유한 시간 양자화 메커니즘에 기인합니다. 이렇게 반올림하면 스레드 예약이 효율적이고 예측 가능하게 수행되어 잠재적인 스레드 예약 충돌을 방지할 수 있습니다.

위 내용은 WinAPI Sleep(1)이 15밀리초 동안 일시 중지되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿