본문 바로가기

WEB/ASP

[asp] (link) ASP에서 sql을 이용한 시간지연. -번역

asp 페이지 작성시, sleep함수를 쓴듯한 효과를 보고싶거나 '일시정지'가 필요할때.

MS-sql 서버를 사용한다면 다음의 소스를 이용하여 딜레이 효과를 낼수 있다.


<% 
 
    Set conn = CreateObject("ADODB.Connection") 
    conn.Open "" 
 
    ' 0 ~ 59 사이의 초수를 지정 합니다.
    sleep = 10 
 
    ' 명령완료가 안될경우를 대비하여, 타임아웃을 잡아줍니다.
    conn.commandTimeout = sleep + 5 
 
    ' 59초이상의 딜레이가 필요하면 다음의 sql문을 수정하십시오. 또한 당신의 필요에 따라 sql문을 작성하면됩니다.
    sql = "WAITFOR DELAY '00:00:" & right(clng(sleep),2) & "'" 
 
    Response.Write(now & "

") conn.Execute sql,,129 Response.Write(now & "

") conn.close: Set conn = Nothing %>

 
 위 소스에서 같이 사용된 몇가지 명령어가 있는데
WAITFOR DELAY는 지정한 시간(시:분:초)동안 명령의 실행을 지연시킨다.

commandTimeout  은 사용된 명령의 수행시간이 너무 오래 걸리거나 할경우, 만료시간을 주어 명령을 종료시키는 명령.


위의 예제를 상세히 설명하자면, sql문에서 waitfor delay를 통해 10초가 지난후 명령을 실행시킨다. 하지만 위 소스에서는 어떠한 명령도 없으므로, DB는 계속해서 명령을 기다리는 상태.
이상태에서 5초가 더 지나게되면 commandTimeout 으로 설정해준 만료시간 15초가 다 지나서 해당 명령이 종료되고 커넥션을 끊고 이후의 asp페이지의 코드들이 실행된다.

즉 asp 코드의 실행전 15초의 딜레이를 주는 스크립트.


다른 방법으로 다음과 같은 방법을 추천하는 사람들이 있는데


<%  
Response.Buffer = true 
 
Function WaitFor(SecDelay,ShowMsg) 
    timeStart = Timer() 
    timeEnd = timeStart + SecDelay 
 
    Msg = "Timer started at " & timeStart & "
" Msg = Msg & "Script will continue in " i = SecDelay Do While timeStart < timeEnd If i = Int(timeEnd) - Int(timeStart) Then Msg = Msg & i If i <> 0 Then Msg = Msg & ", " If ShowMsg = 1 Then Response.Write Msg %> <% Response.Flush() %> <% Msg = "" i = i - 1 End if timeStart = Timer() Loop Msg = "...
Slept for " & SecDelay & " seconds (" & _ Timer() & ")" If ShowMsg = 1 Then Response.Write Msg End Function Call WaitFor(20,0) Call WaitFor(3,1) %>
 
매우매우 안좋다고 한다.
cpu의 사용량과 pagefault를 엄청나게 발생시키기 때문이라고... 

원본 : 
http://classicasp.aspfaq.com/general/how-do-i-make-my-asp-page-pause-or-sleep.html