在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