는 문서DBMS_ALERT 폴링 간격
WAITANY
과정에서, 제발, 여기에이 단락을 설명한다.WAITANY
절차를 사용하고 신호 세션이 신호를 보내지 만 신호의 1 초 내에 커밋하지 않으면 폴링 루프가 필요하므로이 커밋되지 않은 경고가 다른 경고를 위장하지 않습니다. 폴링 루프는 1 초 간격으로 시작하여 30 초 간격으로 지수 적으로 역행합니다.
정확히 여기서 WAITANY가 서버에서 호출 될 때 스레드가 일정 간격으로 이벤트가 있는지를 쿼리한다고합니다. 그리고 WAITANY에 충분히 긴 시간 제한으로 전화를 걸면 이벤트가 발생하면 현재 요청 간격이 만료 된 후에 만 알림을 받게됩니까? 그. 이 코드와 비슷합니다.
function WaitAny(ATimeout) {
const intervals = [0, 1, ....., 30);
for (i = 0; i < intervals.length; i++) {
Sleep(min(intervals[i], ATimeout))
if (IsExistsEvents())
return 0;
ATimeout -= intervals[i];
if (ATimeout <= 0)
return 1;
}
maxInterval = intervals[intervals.length - 1];
while (ATimeout > 0) {
Sleep(min(maxInterval, ATimeout))
if (IsExistsEvents())
return 0;
ATimeout -= maxInterval;
}
return 1;
}