다음을 통해 공유


대기 가능한 타이머 개체

대기 가능한 타이머 개체는 지정된 기한이 도착할 때 상태가 신호로 설정된 동기화 개체입니다. 만들 수 있는 대기 가능한 타이머에는 수동 재설정 및 동기화의 두 가지 유형이 있습니다. 두 형식의 타이머는 주기적인 타이머일 수도 있습니다.

개체 설명
수동 재설정 타이머 SetWaitableTimer를 호출하여 새 기한을 설정할 때까지 상태가 신호로 유지되는 타이머입니다.
동기화 타이머 스레드가 타이머 개체에 대한 대기 작업을 완료할 때까지 상태가 신호로 유지되는 타이머입니다.
주기적 타이머 타이머가 다시 설정되거나 취소될 때까지 지정된 기간이 만료될 때마다 다시 활성화되는 타이머입니다. 주기적인 타이머는 주기적인 수동 재설정 타이머 또는 주기적인 동기화 타이머입니다.

 

참고

타이머가 신호를 받으면 프로세서를 실행하여 연결된 지침을 처리해야 합니다. 빈도가 높은 주기적 타이머는 프로세서를 지속적으로 사용 중으로 유지하므로 의미 있는 시간 동안 시스템이 더 낮은 전원 상태로 유지되지 않습니다. 이는 휴대용 컴퓨터 배터리 수명 및 대형 데이터 센터와 같은 효과적인 전원 관리에 의존하는 시나리오에 부정적인 영향을 미칠 수 있습니다. 에너지 효율성을 높이기 위해 애플리케이션에서 시간 기반 알림 대신 이벤트 기반 알림을 사용하는 것이 좋습니다. 타이머가 필요한 경우 주기적 타이머가 아닌 한 번 신호를 받은 타이머를 사용하거나 간격을 1초보다 큰 값으로 설정합니다.

 

스레드는 CreateWaitableTimer 또는 CreateWaitableTimerEx 함수를 사용하여 타이머 개체를 만듭니다. 스레드 만들기는 타이머가 수동 재설정 타이머인지 동기화 타이머인지를 지정합니다. 만드는 스레드는 타이머 개체의 이름을 지정할 수 있습니다. 다른 프로세스의 스레드는 OpenWaitableTimer 함수에 대한 호출에서 해당 이름을 지정하여 기존 타이머에 대한 핸들을 열 수 있습니다. 타이머 개체에 대한 핸들이 있는 스레드는 대기 함수 중 하나를 사용하여 타이머 상태가 신호로 설정될 때까지 기다릴 수 있습니다.

  • 스레드는 SetWaitableTimer 함수를 호출하여 타이머를 활성화합니다. SetWaitableTimer에 다음 매개 변수를 사용합니다.
  • lpDueTime 매개 변수를 사용하여 타이머를 신호 상태로 설정할 시간을 지정합니다. 수동 재설정 타이머가 신호 상태로 설정된 경우 SetWaitableTimer 가 새 기한을 설정할 때까지 이 상태로 유지됩니다. 동기화 타이머가 신호 상태로 설정되면 스레드가 타이머 개체에 대한 대기 작업을 완료할 때까지 이 상태로 유지됩니다.
  • SetWaitableTimer 함수의 lPeriod 매개 변수를 사용하여 타이머 기간을 지정합니다. 마침표가 0이 아닌 경우 타이머는 주기적 타이머입니다. 타이머가 다시 설정되거나 취소될 때까지 기간이 만료될 때마다 다시 활성화됩니다. 마침표가 0이면 타이머가 주기적인 타이머가 아닙니다. 한 번 신호를 받은 다음 비활성화됩니다.

스레드는 CancelWaitableTimer 함수를 사용하여 타이머를 비활성 상태로 설정할 수 있습니다. 타이머를 다시 설정하려면 SetWaitableTimer를 호출합니다. 타이머 개체가 완료되면 CloseHandle 을 호출하여 타이머 개체에 대한 핸들을 닫습니다.

대기 가능한 타이머의 동작은 다음과 같이 요약할 수 있습니다.

  • 타이머가 설정되면 타이머가 이미 활성 상태이고 타이머 상태가 서명되지 않은 경우 취소되며 타이머는 커널 타이머 큐에 배치됩니다.
  • 타이머가 만료되면 타이머가 신호된 상태로 설정됩니다. 타이머에 완료 루틴이 있는 경우 타이머를 설정하는 스레드에 큐에 대기됩니다. 완료 루틴은 스레드가 경고 대기 상태가 될 때까지 스레드의 APC( 비동기 프로시저 호출 ) 큐에 남아 있습니다. 이때 APC가 디스패치되고 완료 루틴이 호출됩니다. 타이머가 주기적이면 커널 타이머 큐에 다시 배치됩니다.
  • 타이머가 취소되면 보류 중인 경우 커널 타이머 큐에서 제거됩니다. 타이머가 만료되었고 타이머를 설정하는 스레드에 대기 중인 APC가 여전히 있는 경우 APC는 스레드의 APC 큐에서 제거됩니다. 타이머의 신호 상태는 영향을 받지 않습니다.

비동기 프로시저 호출

대기 가능한 타이머 개체 사용