标题:asp调用vb插件形成延时不使CPU 100%,使用cpu为 零
只看楼主
ysf0181
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:55
帖 子:914
专家分:2385
注 册:2006-10-4
结帖率:76.71%
 问题点数:0 回复次数:1 
asp调用vb插件形成延时不使CPU 100%,使用cpu为 零
vb代码:
Private Sub Class_Initialize()
ASP2DLL_Initialize
End Sub

Private Sub Class_Terminate()
ASP2DLL_Terminate
End Sub

Public Sub hello()
Response.Write ("Hello World!")
End Sub

Public Function Delay(DT As Single)
    '延时 DT 秒
    '当 DT=0,返回Delay状态: True:未完成, False:已完成
    Dim t1 As Single
    Static InDelay As Boolean
    '
    If InDelay Or DT <= 0 Then
        Delay = InDelay
        Exit Function
    End If
    '
    InDelay = True
    t1 = Timer
    Do Until Timer - t1 > DT
        Call Sleep(10)
        DoEvents
    Loop
    InDelay = False
    Delay = False
End Function




Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public objContext As ObjectContext
Public Application As ASPTypeLibrary.Application
Public Server As ASPTypeLibrary.Server
Public Session As ASPTypeLibrary.Session
Public Response As ASPTypeLibrary.Response
Public Request As ASPTypeLibrary.Request



Public Sub ASP2DLL_Initialize()
On Error Resume Next
    Set objContext = GetObjectContext
    Set Application = objContext.Item("Application")
    Set Server = objContext.Item("Server")
    Set Session = objContext.Item("Session")
    Set Request = objContext.Item("Request")
    Set Response = objContext.Item("Response")
   
End Sub
Public Sub ASP2DLL_Terminate()
On Error Resume Next
    Set Application = Nothing
    Set Server = Nothing
    Set Session = Nothing
    Set Request = Nothing
    Set Response = Nothing
    Set objContext = Nothing
   ' Set Sleep = Nothing
End Sub


asp代码:


dim t1,t2,lsabc,thetime
t1=timer
'response.write t1&"<br>"


Dim ASP2DLL
Set ASP2DLL = Server.CreateObject("ASP2DLL.Demo")

ASP2DLL.hello()
ASP2DLL.Delay(0.5) '
Set ASP2DLL = Nothing



t2=timer
thetime=cstr(int(((t2-t1)*10000 )+0.5)/10)  '?
response.write "<br>"&thetime&"<br>"

附件在我的QQ群共享里有。

[ 本帖最后由 ysf0181 于 2013-12-26 12:42 编辑 ]
搜索更多相关主题的帖子: False hello 
2013-12-26 12:40
ysf0181
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:55
帖 子:914
专家分:2385
注 册:2006-10-4
得分:0 
这么跟你说,服务器端的asp脚本使用的是iis服务,这个服务引发的进程数只有w3g.exe 如果你要在服务端延迟或者说是暂停,就会导致这个进程挂起,使该进程处于cpu的时间片等待序列中,最终导致不能访问站点下的其他网页。
个人建议,不用思考服务器端的 延迟,实在需要 可以用循环和当前的服务器时间进行。

以上这段话,在没加  EnableSessionState=False  时,是成立的,加了之后,就可以延时,本人亲自测试过了。可行的。
使用ASP指令 EnableSessionState=False突破ASP的线程限制 。
在要延时处理的页面头部,加入的代码:  <%@ Language="VBScript" codepage ="936" EnableSessionState=False %>


注意:iis重启(电脑重启),第一次执行时,还是会卡住进程,下次就不会了。

[ 本帖最后由 ysf0181 于 2013-12-27 11:03 编辑 ]

ASP讨论QQ群:251346273
2013-12-27 10:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-425717-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.356728 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved