定時 在ASP中我們為完成某些特定功能時,需要延遲輸出,讓指令碼運行更長的時間,比如說聊天室程式,我們知道更新對話內容有兩種方法,一是
用戶端自動重新整理,每隔一段時間向伺服器查詢一次,看看有沒有新的內容,而另一種就是伺服器主動輸出新的內容,這兩
種辦法的優缺點很明顯,前者內容不夠即時性,但對伺服器的負擔較輕,而後一種,由於需要長時間在伺服器上執行腳
本,因此人數多的時侯,當然是一種累伺服器的工作了。
針對後一種應用,我們需要延遲ASP的執行,但又不能空佔用伺服器資源,比如說加個無窮迴圈下去,這樣的話很快就
把你的CPU吃掉了,只有在迴圈中加如一個定時功能,讓每個迴圈可以掛起一定是時間,那麼這段時間CPU是閒置,這樣
才不致於讓CPU“當”了機
先看這個例子http://chat.aaaaa.com.cn/question/disptest.asp,看看它象不象碧海銀沙那類的聊天室的更新訪
式?
ASP中沒有setTimeout這類的定時語句,我們需要利用ASP組件來解決,同樣,可以採用VB6來編製,具體操作方法參考
上一編組件的做法,為了掛起線程,我們需要運用WIN32API函數Sleep,同樣建立一個Active Dll工程,起名字為Timer,
類名為sleep。
sleep這個WIN32API函數可以用VB6內建的API文本瀏覽器中找到它的聲明方法
現在類sleep的程式如下,這個組件程式很簡單的,我不多解說了。
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private m_set As Long
Public Property Get setup() As Long
setup = m_set
End Property
Public Property Let setup(strset As Long)
m_set = strset
End Property
Public Function Sleeptime()
Sleep (setup)
End Function
把它編譯一下,就產生timer.dll這個組件dll,如果您不會寫VB程式,那麼您也可以在下載的檔案包裡找到timer.dll
這個檔案。把它copy到windows目錄下,在MS-DOS方式中輸入
c:\windows\regsvr32 timer.dll
完成組件註冊,同樣可以使用這個定時組件。
現在解說剛才按個列子的ASP調用檔案。看看這個組件如何使用
*定時器的應用
<html>
<title>定時器的應用</title>
<head>
</head>
<body>
<%
‘這個是指令碼執行時間,預設為90秒,需要改長一點,不然在90秒後程式會被中斷'3600為一小時
Server.ScriptTimeOut=3600
set obj=server.createobject("timer.sleep")
'參數1000為線程掛起一秒鐘,可以隨意設定
obj.setup=1000
do while true
response.write "("&right(Time,8)&") 您好,現在計數值為<font color=red>"&application("time_count")
&"</font><br>"
obj.sleeptime
application("time_count")=application("time_count")+1
If Not Response.IsClientConnected Then
set obj=nothing
session.abandon
End If
loop
%>
</body>
</html>
好了,我把上面的代碼打包,大家看看這個組件對您自己有什麼協助吧,可能一定用處也沒有,但也可能很有用處,
以上組件的運行環境為:Pwin98+Pws4
NT40+IIS40