제한 시간
통신 리소스에 대한 핸들에는 읽기 및 쓰기 작업의 동작에 영향을 주는 연결된 시간 제한 매개 변수 집합이 있습니다. 시간 제한으로 인해 지정된 수의 문자를 읽거나 쓰지 않았더라도 제한 시간 간격이 경과하면 ReadFile, ReadFileEx, WriteFile 또는 WriteFileEx 작업이 종료될 수 있습니다. 읽기 또는 쓰기 작업 중에 시간 초과가 발생하면 오류로 처리되지 않습니다(즉, 읽기 또는 쓰기 함수의 반환 값은 성공을 나타낸다). 실제로 읽거나 쓴 바이트 수는 ReadFile 또는 WriteFile (또는 I/O가 겹치는 작업으로 수행된 경우 GetOverlappedResult 또는 FileIOCompletionRoutine 함수)에 의해 보고됩니다.
애플리케이션이 통신 리소스를 열면 시스템은 리소스의 제한 시간 값을 리소스가 마지막으로 사용된 경우 적용되는 값으로 설정합니다. 통신 리소스를 열지 않은 경우 시스템은 제한 시간 값을 일부 기본값으로 설정합니다. 두 경우 모두 애플리케이션은 리소스를 연 후 항상 현재 제한 시간 값을 확인한 다음 요구 사항을 충족하도록 명시적으로 설정해야 합니다. 통신 리소스의 현재 제한 시간 값을 확인하려면 GetCommTimeouts 함수를 사용합니다. 제한 시간 값을 변경하려면 SetCommTimeouts 함수를 사용합니다.
시간 제한 매개 변수에 의해 두 가지 유형의 제한 시간이 사용하도록 설정됩니다. 간격 제한 시간은 두 문자의 수신 사이의 시간이 지정된 시간(밀리초)을 초과할 때 발생합니다. 타이밍은 첫 번째 문자가 수신될 때 시작되고 각 새 문자가 수신될 때 다시 시작됩니다. 총 시간 제한은 읽기 작업에 소요된 총 시간이 계산된 시간(밀리초)을 초과할 때 발생합니다. 타이밍은 I/O 작업이 시작될 때 즉시 시작됩니다. 쓰기 작업은 총 시간 제한만 지원합니다. 읽기 작업은 간격 및 총 제한 시간을 모두 지원하며, 별도로 사용하거나 결합할 수 있습니다.
읽기 또는 쓰기 작업의 총 제한 시간(밀리초)은 GetCommTimeouts 또는 SetCommTimeouts 함수에 지정된 COMMTIMEOUTS 구조체의 승수 및 상수 값을 사용하여 계산됩니다. 사용 수식:
Timeout = (MULTIPLIER * number_of_bytes) + CONSTANT
승수와 상수를 모두 사용하면 요청되는 데이터의 양에 따라 총 제한 시간이 달라질 수 있습니다. 애플리케이션은 승수를 0으로 설정하여 상수만 사용하거나 상수를 0으로 설정하여 승수만 사용할 수 있습니다. 상수와 승수가 모두 0이면 총 제한 시간이 사용되지 않습니다.
모든 읽기 시간 제한 매개 변수가 0이면 읽기 시간 제한이 사용되지 않으며 요청된 바이트 수를 읽거나 오류가 발생할 때까지 읽기 작업이 완료되지 않습니다. 마찬가지로 모든 쓰기 시간 제한 매개 변수가 0이면 요청된 바이트 수가 작성되거나 오류가 발생할 때까지 쓰기 작업이 완료되지 않습니다.
읽기 간격 제한 시간 매개 변수가 MAXDWORD 값이고 읽기 총 시간 제한 매개 변수가 모두 0인 경우 비어 있더라도 입력 버퍼에서 사용할 수 있는 문자를 읽은 직후 읽기 작업이 완료됩니다.
간격 타이밍은 수신에 소강 상태가 있을 때 읽기 작업을 강제로 반환합니다. 간격 제한 시간을 사용하는 프로세스는 상당히 짧은 간격 매개 변수를 설정할 수 있으므로 하나 또는 몇 문자의 작고 격리된 버스트에 빠르게 응답할 수 있지만, 안정적인 스트림에서 데이터를 수신할 때 단일 호출로 큰 문자 버퍼를 수집할 수 있습니다.
쓰기 작업에 대한 제한 시간은 일종의 흐름 제어에 의해 전송이 차단되거나 문자 전송을 일시 중단하기 위해 SetCommBreak 함수가 호출된 경우에 유용할 수 있습니다.
다음 표에서는 총 및 간격 제한 시간에 대해 지정된 값을 기반으로 읽기 작업의 동작을 요약합니다.
합계 | 간격 | 동작 |
---|---|---|
0 | 0 | 버퍼가 완전히 채워지면 를 반환합니다. 시간 제한은 사용되지 않습니다. |
T | 0 | 버퍼가 완전히 채워지거나 작업 시작 후 T 밀리초가 경과한 경우를 반환합니다. |
0 | Y | 버퍼가 완전히 채워지거나 두 문자를 받는 사이에 Y 밀리초가 경과한 경우를 반환합니다. 첫 번째 문자가 수신될 때까지 타이밍이 시작되지 않습니다. |
T | Y | 버퍼가 완전히 채워지거나 시간 제한 유형이 발생할 때 를 반환합니다. |
참고
그러나 해당 타이밍은 물리적 디바이스를 제어하는 시스템에 상대적입니다. 모뎀과 같은 원격 디바이스의 경우 타이밍은 모뎀이 연결된 서버 시스템을 기준으로 합니다. 네트워크 전파 지연은 고려되지 않습니다. 예를 들어 클라이언트 애플리케이션은 계산하는 총 제한 시간을 500밀리초로 지정할 수 있습니다. 서버에서 500밀리초가 경과하면 시간 제한 오류가 클라이언트에 반환됩니다. 50밀리초의 네트워크 전파 지연이 있는 경우 시간 제한이 실제로 발생한 후 약 50밀리초까지 클라이언트에 시간 제한에 대한 알림이 표시되지 않습니다.
참고
시간 제한 매개 변수는 통신 디바이스에서 겹치는 읽기 및 쓰기 작업의 동작에 영향을 줍니다. 겹치는 I/O를 사용하면 작업이 완료되기 전에 ReadFile, WriteFile, ReadFileEx 또는 WriteFileEx 함수가 반환될 수 있습니다. 시간 제한 매개 변수는 작업이 완료된 시기를 결정할 수 있습니다.