解釋,請點擊這裏本段從文檔DBMS_ALERT輪詢間隔
WAITANY
程序。如果您使用WAITANY
過程,並且如果信令會話執行信號但在信號的一秒鐘內未提交,則需要輪詢循環,以便此未提交的警報不會僞裝其他警報。輪詢循環從一秒鐘間隔開始,並以指數方式退避至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;
}