절전 모드 함수(synchapi.h)
제한 시간 간격이 경과할 때까지 현재 스레드의 실행을 일시 중단합니다.
경고 대기 상태를 입력하려면 SleepEx 함수를 사용합니다.
구문
void Sleep(
[in] DWORD dwMilliseconds
);
매개 변수
[in] dwMilliseconds
실행이 일시 중단될 시간 간격(밀리초)입니다.
값이 0이면 스레드가 나머지 시간 조각을 실행할 준비가 된 다른 스레드에 포기하게 됩니다. 실행할 준비가 된 다른 스레드가 없으면 함수가 즉시 반환되고 스레드가 실행을 계속합니다. Windows XP: 값이 0이면 스레드가 해당 시간 조각의 나머지 부분을 실행할 준비가 된 동일한 우선 순위의 다른 스레드로 포기하게 됩니다. 동일한 우선 순위의 다른 스레드를 실행할 준비가 되지 않은 경우 함수는 즉시 반환되고 스레드는 실행을 계속합니다. 이 동작은 Windows Server 2003부터 변경되었습니다.
INFINITE 값은 일시 중단이 시간 초과되어서는 안 됨을 나타냅니다.
반환 값
없음
설명
이 함수를 사용하면 스레드가 나머지 시간 조각을 포기하고 dwMilliseconds 값에 따라 간격을 실행할 수 없게 됩니다. 시스템 클록은 일정한 속도로 "틱"합니다. dwMilliseconds가 시스템 클록의 해상도보다 작으면 스레드가 지정된 시간 길이보다 작게 절전 모드가 될 수 있습니다. dwMilliseconds가 틱 1개보다 크지만 2개 미만인 경우 대기는 1-2틱 사이일 수 있습니다. 절전 모드 간격의 정확도를 높이려면 timeGetDevCaps 함수를 호출하여 지원되는 최소 타이머 해상도와 timeBeginPeriod 함수를 확인하여 타이머 해상도를 최소값으로 설정합니다. 잦은 호출이 시스템 클록, 시스템 전원 사용량 및 스케줄러에 크게 영향을 줄 수 있으므로 timeBeginPeriod를 호출할 때는 주의해야 합니다. timeBeginPeriod를 호출하는 경우 애플리케이션에서 한 번 일찍 호출하고 애플리케이션의 맨 끝에 있는 timeEndPeriod 함수를 호출해야 합니다.
절전 모드 간격이 지나면 스레드를 실행할 준비가 된 것입니다. 0밀리초를 지정하면 스레드는 나머지 시간 조각을 포기하지만 준비된 상태로 유지됩니다. 준비된 스레드가 즉시 실행되도록 보장되지는 않습니다. 따라서 스레드는 절전 간격이 경과한 후 일정 시간까지 실행되지 않을 수 있습니다. 자세한 내용은 우선 순위 예약을 참조하세요.
다음 시나리오에서 절전 모드 를 사용할 때는 주의해야 합니다.
- 직접 또는 간접적으로 창을 만드는 코드(예: DDE 및 COM CoInitialize). 스레드가 창을 만드는 경우 메시지를 처리해야 합니다. 메시지 브로드캐스트는 시스템의 모든 창으로 전송됩니다. 무한 지연으로 절전 모드 를 사용하는 스레드가 있는 경우 시스템이 교착 상태가 됩니다.
- 동시성 제어를 받고 있는 스레드입니다. 예를 들어 I/O 완료 포트 또는 스레드 풀은 실행할 수 있는 연결된 스레드 수를 제한합니다. 최대 스레드 수가 이미 실행 중인 경우 실행 중인 스레드가 완료될 때까지 연결된 추가 스레드를 실행할 수 없습니다. 스레드가 간격이 0인 절전 모드를 사용하여 연결된 추가 스레드 중 하나가 일부 작업을 수행할 때까지 기다리는 경우 프로세스가 교착 상태가 될 수 있습니다.
Windows Phone 8.1: 이 함수는 Windows Phone 8.1 이상에서 Windows Phone 스토어 앱에서 지원됩니다.
Windows 8.1 및 Windows Server 2012 R2: 이 함수는 Windows 8.1, Windows Server 2012 R2 이상에서 Windows 스토어 앱에서 지원됩니다.
예제
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | synchapi.h(Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2의 Windows.h 포함) |
라이브러리 | Kernel32.lib; Windows Phone 8.1의 WindowsPhoneCore.lib |
DLL | Kernel32.dll; Windows Phone 8.1의 KernelBase.dll |